【Python】Basics - 特殊变量(Special Variables)

Posted by 西维蜀黍 on 2019-11-26, Last Modified on 2021-09-21

类似_xx_,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,它不是private变量。

  • __doc__ 属性 - 定义文档字符串
  • __dict__ 属性 - 类的属性列表
  • __class__ 属性 - 返回当前类对应的变量
  • __slots__ 属性 - 在运行时对类的实例动态绑定属性和方法
  • __name__属性 - 返回当前类的类名(以字符串描述)

__slots__ 属性 - 在运行时对类的实例动态绑定属性和方法

from types import MethodType

def set_age(self, age):
    self.age = age 

class P(object):
    pass

p = P() 
p.name = 'chenqi'
# 在运行时为这个类的实例绑定一个方法,但仅限于这个类实例(其他类实例仍然没有这个方法)
p.set_age = MethodType(set_age, p, P)  

p.set_age(31)
print p.name
print p.age

如果想让添加的方法对所有实例都生效,可以绑定到类上:

P.set_age = MethodType(set_age, None, P)

最后,__slots__的作用就是限制对类动态绑定的属性范围,例如:

class P(object):
    __slots__ = ("name", "age")
    pass

如上,除了"name"和"age"之外的属性就不能再增加了;

注意:__slots__属性不会继承给子类,仅在当前类生效。

__class__ 属性 - 返回当前类对应的变量

比如可以这样玩:

class A(object):
   aa = 1

   def get_current_class_variable(self):
      return self.__class__


a = A()
class_A_variable = a.get_current_class_variable()
a2 = class_A_variable()
print a2.aa

这体现了“在 Python 中一切皆对象“的哲学。

__name__属性 - 返回当前类的类名(以字符串描述)

class A(object):
    pass

print A.__name__ # A

Reference

http://www.liujiangblog.com/course/python/47