精因宝贝新一代助孕█微信 号█:138★0226★9370█广州精因宝贝 ████ █助孕包成功█ ★█100%包男孩█ ★█
31.定义一个类: class class_name: 创建对象: 对象名 = class_name() 继承: class class_name2(parent_classname):
属性、方法 pass #空语句用来维持代码结构
32.python的self关键字相当于java的this,使用:将self作为方法的第一个参数
__init__(self,参数1,2,3,...):相当于构造方法,使用:
私有:在python中定义私有变量只需要在变量或函数名前加“__”两个下划线,那么这个函数或变量就为私有的
由于name为私有,故直接访问是不允许的,但python的私有是伪私有,可以用:对象名._类名__属性来访问,eg: p._Peason__name --> '小甲鱼'
super([指定父类名可有可无])函数:用来调用父类的方法,使用eg:super().__init__(self) #调用父类的构造方法
python支持多继承,语法:class child_class_name(parent1,parent2,...) #尽量别用,容易乱
组合:
注意:如果类的属性和方法名相同,属性会覆盖方法
在创建类的时候,不要试图在一个类里面定义出所有能想到的特性和方法,应该利用继承和组合机制来进行扩展;
用不同的词性来命名,如属性名用名词,方法名用动词
32.绑定:python严格要求方法需要有实例才能被调用;由于对象调用自己的绑定方法,会自动将对象当作第一个参数传递进去,所以,当类中方法没有带参数时,而又给它传递了一个,显然是会报错的。反之,直接用类来调用方法时,则不会将自己作为参数传递进去,当方法有self参数时(self参数必须放在第一个参数位),用类名调用方法则会报错
==>
类中定义的属性和方法是静态的,当程序结束才会被释放,所以在大多数情况下应该考虑用self属性,def set属性(sefl,cs1,cs2...): self.sx1 = cs1 self.sx2 = cs2
类属性通常用来跟踪与类相关的值
33.一些相关的BIF:
issubclass(class,classinfo):用来判断classinfo是否为class的子类,classinfo可以是由类对象组成的元组,只要class与其中任何一个候选类的子类,则返回true
isinstance(object,classinfo):用来判断对象是否为classinfo的实例对象,如果第一个参数不是object对象类型,它就只返回false,如果第二个参数不是类或类对象组成的元组,会抛出一个TypeError异常
hasattr(object,'属性'):用来判断对象中是否有string这个属性(用字符串表示)
getattr(object,'属性',[提示语]):用来获取对象存在的属性
setattr(object,'属性',value):用来给属性赋值
delattr(object,'属性'):用来删除对象中指定的属性(非删除类的属性),如果属性不存在则抛出AttributeError异常
property(fget = None,fset = None, fdel = None,doc = None):用属性设置属性,参数分别为获取属性方法、设置属性方法、删除属性方法
==>==>
34.魔法方法 :__xxx__,能够在适当的时候被自动调用
__new__(class,参数1234..):创建对象第一个执行的魔法方法
__init__(self)的返回值一定是None,若试图让__init__有返回值则会报错
__del__(self):垃圾回收机制会调用的方法,当类的对象生成以后,所有对象的引用被del消除后才调用__del__方法
35. 控制属性访问的魔法方法(系统和用户在赋值、删除和获取的时候系统会自动调用这些方法)
__getattr__(self,name) -定义当用户试图获取一个不存在的属性时的行为
__getattribute__(self,name) -定义当该类的属性被访问时的行为,比__getattr__先
__setattr__(self,name,value) -定义当一个属性被设置时的行为
__delattr__(self,name) -定义当一个属性被删除时的行为
36.描述符:将某种特殊的类型的类的实例指派给另一个类的属性
特殊类型:要实现一下三个方法其中一个-->
__get__(self,instance,owner) -用于访问属性,它返回属性的值
__set__(self,instance,value) -将在属性分配操作中调用,不返回任何内容
__delete__(self,instance) -控制删除操作,不返回任何内容
对于Test类,MyDecriptor类就是Test的描述符类
37.容器类型的协议:
如果希望定制的容器是不可变的话,只需要定义__len__()和__getitem__()方法
如果希望定制的容器是可变的的,除了__len__()和__getitem__()方法,还需要定义__setitem__()和__delitem()两个方法
38.迭代器两个BIF,iter()--对应的魔法方法->__iter__()返回迭代器本身、next()---->__next__()-->决定了迭代器的规则
当没有元素时就会抛出一个StopIteration的异常