我是面向对象的python编码新手。最近正在研究它们。
假设我有一个代码:
class Student(object):
def __init__(self, name, age, job):
self.name = name
self.age = age
self.job = job
如果我将实例传递给它,如:
a = Student('Ram', 12, False)
b = Student('Hira', 34, True)
然后我可以在a和b上使用类属性,如:
>>>a.name
Ram
>>>b.age
34
我可以访问以下实例:
>>>z=Student()
>>>z.name
Ram
Hira
>>>z.age
12
34
任何想法??
答案 0 :(得分:2)
不是那样的。但是您可以将学生存储在列表中,然后使用列表推导:
students = []
students.append(Student('Ram', 12, False))
students.append(Student('Hira', 34, True))
ages = [s.age for s in students]
这将为您提供所有年龄段的列表。
您甚至可以添加条件:
adult_ages = [s.age for s in students if s.age >= 18]
答案 1 :(得分:2)
是的,你可以!在类中定义任意属性list
,并使用weakref
访问所有类的属性。
weakref
用于通过proxy
方法创建对象(理想情况下为类实例)的弱引用。魔术线意味着获取此类的所有属性并将其附加到列表(此处为实例)。
以下是代码:
import weakref as wr
class A:
instances = []
def __init__(self, name, age, job):
self.__class__.instances.append(wr.proxy(self)) #magic
self.name = name
self.age = age
self.job = job
a1 = A('mario', 23, 'student')
a2 = A('cocoo', 25, 'student')
a3 = A('romeo', 27, 'student')
for instance in A.instances:
print(instance.name)
for instance in A.instances:
print(instance.age)
示例输出:
mario
cocoo
romeo
23
25
27