<!DOCTYPE html>
私有属性
html
class Dog():
def init(self):
self.heart=100
d=Dog()
d.heart #访问不到,heart属于私有
在变量前加两个下划线,变量变为私有属性,外部不能访问,内部能够访问
def getheart():
return self.heart#提供对外的私有属性的访问方法
对私有属性的强制访问
d.Dogheart
python
静态方法
名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性
author = 'Mr.Bool'
class Dog(object):
def init(self,name):
self.name=name
@staticmethod
def eat():
print("%s like eat 骨头"%self.name)
print('狗爱吃骨头')
@staticmethod
def eat(self):
print("%s like eat 骨头"%self.name)
# print('狗爱吃骨头')
def talk(self):
self.eat(self)
print('汪汪') git
d=Dog("汪汪")
d.talk() github
str web
在类里写
def str(self): return "<obj:%s>"%self.name d直接打印对象就输出str里的内容 canvas
new metaclass 类也是对象,type为类的类
class Dog(): pass type(Dog) 会知道类的类为type new方法在init构造函数方法前执行 new里面调用init
def new(cls,args,*kwargs): print('Foo --new--') return object.new(cls) 当return被注释时,init不会被调用,这句继承父类的new方法 metaclass原类 ruby
class MyType(): def init(self): print("mytype init") 1 pass def call(self): print("mytype call") 2 class Dog(): metaclass=MyType def init(self): print("dog init") 4 pass def new(self): print("dog new") 3
call建立new new建立init markdown
反射
getattr setattr hasattr delattr class Foo(object):app
def __init__(self):
self.name = 'wj'
def func(self):
return 'func'
obj = Foo()
检查是否含有成员 #### hasattr(obj, 'name') hasattr(obj, 'func')
获取成员 #### getattr(obj, 'name') getattr(obj, 'func')
设置成员 #### setattr(obj, 'age', 18) setattr(obj, 'show', lambda num: num + 1)
删除成员 #### delattr(obj, 'name') delattr(obj, 'func')