Bagaimana Anda mendapatkan daftar semua variabel dalam kelas yang dapat diulang? Jenis seperti penduduk setempat (), tetapi untuk kelas
class Example(object):
bool143 = True
bool2 = True
blah = False
foo = True
foobar2000 = False
def as_list(self)
ret = []
for field in XXX:
if getattr(self, field):
ret.append(field)
return ",".join(ret)
ini harus kembali
>>> e = Example()
>>> e.as_list()
bool143, bool2, foo
for field in [ self.bool143, self.bool2, self.blah, self.foo, self.foobar2000 ]
? Bagaimana bisa terjadi bahwa Anda tidak mengetahui variabel instan kelas?Jawaban:
memberi Anda semua atribut objek. Anda perlu menyaring anggota dari metode, dll sendiri:
class Example(object): bool143 = True bool2 = True blah = False foo = True foobar2000 = False example = Example() members = [attr for attr in dir(example) if not callable(getattr(example, attr)) and not attr.startswith("__")] print members
Akan memberimu:
['blah', 'bool143', 'bool2', 'foo', 'foobar2000']
sumber
callable(attr)
kerjanya? Bukankahattr
sebuah string?vars(Example).items()
atauvars(instance.__class__).items()
bukandir()
jika Anda ingin memeriksa jika callable atau tidak karena dir hanya akan kembali 'string
s sebagai nama ..Jika Anda hanya menginginkan variabel (tanpa fungsi) gunakan:
sumber
vars
tidak tidak termasuk variabel kelas, hanya variabel instan.members = list(vars(example).keys())
karena (setidaknya dalam python3)vars
mengembalikan namadict
pemetaan dari variabel anggota ke nilainya.@truppo: jawaban Anda hampir benar, tetapi callable akan selalu mengembalikan false karena Anda baru saja memasukkan string. Anda membutuhkan sesuatu seperti berikut:
[attr for attr in dir(obj()) if not callable(getattr(obj(),attr)) and not attr.startswith("__")]
yang akan memfilter fungsi
sumber
>>> a = Example() >>> dir(a) ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'bool143', 'bool2', 'blah', 'foo', 'foobar2000', 'as_list']
—Seperti yang Anda lihat, itu memberi Anda semua atribut, jadi Anda harus menyaring sedikit. Tapi pada dasarnya,
dir()
itulah yang Anda cari.sumber
row2dict = lambda r: {c.name: str(getattr(r, c.name)) for c in r.__table__.columns} if r else {}
Gunakan ini.
sumber
class Employee: ''' This class creates class employee with three attributes and one function or method ''' def __init__(self, first, last, salary): self.first = first self.last = last self.salary = salary def fullname(self): fullname=self.first + ' ' + self.last return fullname emp1 = Employee('Abhijeet', 'Pandey', 20000) emp2 = Employee('John', 'Smith', 50000) print('To get attributes of an instance', set(dir(emp1))-set(dir(Employee))) # you can now loop over
sumber
Cara mudah untuk melakukannya adalah dengan menyimpan semua instance kelas di file
list
.Objek tidak muncul secara spontan. Beberapa bagian dari program Anda membuatnya karena suatu alasan. Penciptaan dilakukan karena suatu alasan. Mengumpulkan mereka dalam daftar juga bisa dilakukan karena suatu alasan.
Jika Anda menggunakan pabrik, Anda bisa melakukan ini.
class ExampleFactory( object ): def __init__( self ): self.all_examples= [] def __call__( self, *args, **kw ): e = Example( *args, **kw ) self.all_examples.append( e ) return e def all( self ): return all_examples makeExample= ExampleFactory() a = makeExample() b = makeExample() for i in makeExample.all(): print i
sumber