类似_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
FEATURED TAGS
algorithm
algorithmproblem
architecturalpattern
architecture
aws
c#
cachesystem
codis
compile
concurrentcontrol
database
dataformat
datastructure
debug
design
designpattern
distributedsystem
django
docker
domain
engineering
freebsd
git
golang
grafana
hackintosh
hadoop
hardware
hexo
http
hugo
ios
iot
java
javaee
javascript
kafka
kubernetes
linux
linuxcommand
linuxio
lock
macos
markdown
microservices
mysql
nas
network
networkprogramming
nginx
node.js
npm
oop
openwrt
operatingsystem
padavan
performance
programming
prometheus
protobuf
python
redis
router
security
shell
software testing
spring
sql
systemdesign
truenas
ubuntu
vmware
vpn
windows
wmware
wordpress
xml
zookeeper