Python 2 & 3, menghapus impor, memfilter objek berdasarkan alamatnya
Solusi singkatnya:
Kembalikan dikt {attribute_name: atribut_value} , objek difilter. yaitu{'a': 1, 'b': (2, 2), 'c': [3, 3]}
{k: val for k, val in self.__dict__.items() if not str(hex(id(val))) in str(val)}
Kembali daftar [nama_tribut] , objek difilter. yaitu['a', 'b', 'c', 'd']
[k for k, val in self.__dict__.items() if not str(hex(id(val))) in str(val)]
Kembalikan daftar [nilai_atribut] , objek yang difilter. yaitu[1, (2, 2), [3, 3], {4: 4}]
[val for k, val in self.__dict__.items() if not str(hex(id(val))) in str(val)]
Tidak memfilter objek
Menghapus if
kondisi tersebut. Kembali{'a': 1, 'c': [3, 3], 'b': (2, 2), 'e': <function <lambda> at 0x7fc8a870fd70>, 'd': {4: 4}, 'f': <object object at 0x7fc8abe130e0>}
{k: val for k, val in self.__dict__.items()}
Solusi lama
Selama implementasi default __repr__
tidak ditimpa , if
pernyataan akan dikembalikan True
jika representasi heksadesimal dari lokasi dalam memori val
ada dalam __repr__
string kembali.
Mengenai implementasi default __repr__
Anda dapat menemukan berguna jawaban ini . Pendeknya:
def __repr__(self):
return '<{0}.{1} object at {2}>'.format(
self.__module__, type(self).__name__, hex(id(self)))
Yang mengembalikan string seperti:
<__main__.Bar object at 0x7f3373be5998>
Lokasi dalam memori setiap elemen didapat melalui id()
metode.
Python Docs mengatakan tentang id ():
Kembalikan "identitas" dari suatu objek. Ini adalah bilangan bulat yang dijamin unik dan konstan untuk objek ini selama masa pakainya. Dua objek dengan masa pakai yang tidak tumpang tindih mungkin memiliki nilai id () yang sama.
Detail implementasi CPython: Ini adalah alamat objek di memori.
Coba sendiri
class Bar:
def __init__(self):
self.a = 1
self.b = (2, 2)
self.c = [3, 3]
self.d = {4: 4}
self.e = lambda: "5"
self.f = object()
#__str__ or __repr__ as you prefer
def __str__(self):
return "{}".format(
# Solution in Short Number 1
{k: val for k, val in self.__dict__.items() if not str(hex(id(val))) in str(val)}
)
# Main
print(Bar())
Keluaran:
{'a': 1, 'c': [3, 3], 'b': (2, 2), 'd': {4: 4}}
Catatan :