类python的操作

时间:2015-12-19 20:05:32

标签: python class oop instance

我是面向对象的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

任何想法??

2 个答案:

答案 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