python类汇总_python类总结

私有属性

class Dog():

def init(self):

self.heart=100

d=Dog()

d.heart #访问不到,heart属于私有

在变量前加两个下划线,变量变为私有属性,外部不能访问,内部可以访问

def getheart():

return self.heart#提供对外的私有属性的访问方法

对私有属性的强制访问

d.Dogheart

公有属性(所有类共同拥有的属性)

class Dog()

type='京巴' #创建公有属性

d=Dog()

d2=Dog()

Dog.type #这样调用,是在所有类的对象的公有变量里设置

d.type#d,d2属性相同

d2.type#当用对象调用的时候,会在自己对象的内存里新建一个type变量

析构函数

d=Dog()

del d#删除对象名到内存空间的引用

继承

静态方法

名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性

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('汪汪')

d=Dog("汪汪")

d.talk()

类方法

@classmethod

类方法只能访问类变量。不能访问实例变量。几乎很少用

属性方法

@property

把一个方法变成一个静态属性,不用括号调用。

class Dog():

def init(self):

pass

@property

def eat(self):

print('狗爱吃骨头')

@property

def eat(self,name):

print('狗爱吃%s'%self.name)

@eat.setter

def eat(self,foot):

print('set to foot:%s'%foot)

d=Dog()

d.eat 调用属性方法

d.eat='包子' 当属性方法需要传参数,就要重写一个方法,方法名与属性方法名相同

d.Eat='包子' 大写也可以

当删除属性方法时用

@eat.delete

def eat(self):

del self.__food

print('删完了')

类的描述信息

class Dog():

'''这个类是描述狗的'''

print(Dog.doc)输出 这个类是描述狗的

module 和 class

module输出 这个类是从哪个模块里

class输出类

call

对象后面加括号执行call

d=Dog()

d() 将调用Dog里的call方法

dict查看对象中的所有成员变量和方法,使用实例调用只打印实例内的属性,不包括类属性

str

在类里写

def str(self):

return ""%self.name

d直接打印对象就输出str里的内容

getitem,setitem,delitem,把类变成字典

class Foo(object):

def init(self):

self.data={}

pass

def getitem(self,key):

print('getitem',key)

return self.data.get(key)

pass

def setitem(self,key,value):

print('setitem',key)

self.data[key]=value

pass

def delitem(self,key):

print('delitem',key)

pass

obj=Foo()

obj['name']='alex'#自动触发执行 getitem

print(obj['name'] #自动触发执行 setitem

del obj['k1'] #自动触发执行delitem

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原类

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

反射

getattr setattr hasattr delattr

class Foo(object):

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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值