python面向对象

封装

构造函数__init__(),所有方法要传入self。

类变量。使用方法:类名.类变量。

实例变量。写在__init__()的body里。也可以在实例化后增加。对于简单类型,这样做,在别的实例是没有这个变量的,也不会覆盖类变量,是实例的自有的变量。实例在.变量时,先用自己的,若没有则找类变量。对于集合等,实例在.变量时,则看是赋值还是追加(例如append),赋值会创建新的自有变量,追加得提前在类中定义该变量。

析构函数,在实例销毁时执行的收尾工作。比如关闭文件、数据库等。def __def__(self):

私有属性/方法:前面加上__,后面不用加。

 

继承

class Man(People):

子类的方法里调用父类方法:用父类名.父类方法。例如:People/Man里

def __init__(self,name,age,money):

  People.__init__(self,name,age)

  self.money = money

也可以用“新式类”格式这样:

def __init__(self,name,age,money):

  super(Man,self).__init__(self,name,age)

  self.money = money

python可以多继承,所以后者更方便。

多继承:

class Man(Peole,Relation): 构造函数,按继承顺序执行。2.0版本经典类用的深度优先,新式类用广度优先,3.0用的都是广度优先。

新式类:

class People(object):

写程序要安新式方式写。

静态方法:@staticmethod装饰的类方法。实际上跟类没有关系。名义上归类管,但不能访问类或实例中的任何成员。比如os模块。

类方法:@classmethod装饰的类方法。只能访问类变量,不能访问实例变量。

属性方法:@property装饰的类方法。调用不加括号。把一个方法变成一个静态属性。再写一个同名方法,并用@同名方法.setter装饰。放在前者下面。外面调用时,用=传参数。

普通属性,可以用del删除。但是属性方法得用特殊方式删除。可以@同名方法.deleter删除。

obj.__module__输出模块

obj.__class__输出类

def __call__(self,*args,**kwargs),可以把类的实例用()调用。

__dict__查看类中所有成员Dog.__dict__,不包括实例属性     d.__dict__,查看实例所有属性,不包括类属性。

__str__字符串化,类似java的toString()

__getitem __setitem __delitem 让实例像字典一样赋值。

__new__\__metaclass__ 一个类是type类的一个实例,是通过type类的构造方法创建 


def func(self):
print('hello %s' %self.name)
def __init__(self,name):
self.name = name

Foo = type('Foo',(object,),{'talk':func,'__init__':__init__})
f = Foo("roger")
f.talk()
print(type(Foo))
 

type是类的类。

__new__ 在__init__之前执行。new是用来创建实例的,new里调用了init。call里调用了new。

__metaclass__ 用来定义这个类以怎样形式被创建

 

posted @ 2018-05-23 08:00  强巴  阅读(116)  评论(0编辑  收藏  举报