Python - 类属性


每个 Python 类都保留以下内置属性,并且可以像任何其他属性一样使用点运算符访问它们 -

  • __dict__ - 包含类的名称空间的字典。

  • __doc__ - 类文档字符串或无(如果未定义)。

  • __name__ - 类名。

  • __module__ - 定义类的模块名称。该属性在交互模式下为“__main__”。

  • __bases__ - 包含基类的可能为空的元组,按照它们在基类列表中出现的顺序排列。

对于上面的类,让我们尝试访问所有这些属性 -

class Employee:
   def __init__(self, name="Bhavana", age=24):
      self.name = name
      self.age = age
   def displayEmployee(self):
      print ("Name : ", self.name, ", age: ", self.age)

print ("Employee.__doc__:", Employee.__doc__)
print ("Employee.__name__:", Employee.__name__)
print ("Employee.__module__:", Employee.__module__)
print ("Employee.__bases__:", Employee.__bases__)
print ("Employee.__dict__:", Employee.__dict__ )

它将产生以下输出-

Employee.__doc__: None
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: (<class 'object'>,)
Employee.__dict__: {'__module__': '__main__', '__init__': <function Employee.__init__ at 0x0000022F866B8B80>, 'displayEmployee': <function Employee.displayEmployee at 0x0000022F866B9760>, '__dict__': <attribute '__dict__' of 'Employee' objects>, '__weakref__': <attribute '__weakref__' of 'Employee' objects>, '__doc__': None}

类变量

在上面的 Employee 类示例中,name 和age 是实例变量,因为它们的值对于每个对象可能不同。类属性或变量,其值在此类中的所有实例之间共享。类属性表示类的所有对象的公共属性。

类属性未在 __init__() 构造函数内初始化。它们在类中定义,但在任何方法之外。除了对象之外,还可以通过类名称来访问它们。换句话说,类属性可用于类及其对象。

例子

让我们在 Employee 类中添加一个名为empCount 的类变量。对于声明的每个对象,都会自动调用 __init__() 方法。该方法初始化实例变量并将empCount加1。

class Employee:
   empCount = 0
   def __init__(self, name, age):
      self.__name = name
      self.__age = age
      Employee.empCount += 1
      print ("Name: ", self.__name, "Age: ", self.__age)
      print ("Employee Number:", Employee.empCount)

e1 = Employee("Bhavana", 24)
e2 = Employee("Rajesh", 26)
e3 = Employee("John", 27)

输出

我们已经声明了三个对象。每次,empCount都会增加 1。

Name: Bhavana Age: 24
Employee Number: 1
Name: Rajesh Age: 26
Employee Number: 2
Name: John Age: 27
Employee Number: 3