python3学习之类成员扩展父类方法的功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3学习之类成员扩展父类方法的功能相关的知识,希望对你有一定的参考价值。
##类成员包括: #字段:静态字段、普通字段 字段也可以理解为“变量” #方法:普通方法、静态方法、类方法;所有方法属于类 方法也可以理解为“函数” #属性:具有方法的定义形式,具有字段访问形式 用字段的访问方式调用方法,就需要定义“属性” #当不想创建对象访问类中方法时,方法需要是静态方法 ##成员修饰符 #公有字段 内外都可以访问 #__name 私有字段,前面有两个下划线,只在类中可以访问,通过对象访问不了 ,继承的父类和子类中也无法调用,只在本类中可以 #PS:不到万不得已不要在外部访问私有字段,obj._Foo__name 该方式可以访问私有字段 ##特殊成员 __xxxx__ #__init__ 构造方法,创建对象时自动执行 #__del__ 析构方法,回收闲置对象占用的内存之前自动执行该函数,不需要自己定义,python自动执行 #__doc__ 注释、说明 #__class__ 当前类 #__call__ 对象后面加括号,调用类的__call__方法,__call__需要在类中定义 #__str__ 打印对象时是对象的内存地址,类中定义了__str__方法后,可以自定义输出内容及格式 #__dict__ 打印该对象包含的所有方法 #__getitem__ __setitem__ __delitem__ 当对象参数是列表时,实际上调用了这些方法 #__iter__ 对象默认不可迭代,当定义了该方法,才可以;当对象放在for循环里,默认调用对象的__iter__方法(这是规定) #issubclass(cls1,cls2) 判断cls1是不是cls2的子类,返回True或者False #isinstance(obj,classname) 判断obj是不是classname的实例(继承也算是) ##调用父类方法 #方法1 主动执行父类的方法: super(子类,self).父类方法;扩展父类方法的功能时使用;父类和子类的方法名需要相同 #方法2 通过类调用,一般不用 # # class Foo: # CC = 123 #CC叫静态字段,保存在类里,可以通”过类.字段“访问,也可以通过对象访问,java中只能通过类访问 # # def __init__(self): # self.name = ‘test‘ #name 就叫字段(普通字段),保存在对象里 # # def show(self): #普通方法,通过对象调用 ,self必须有 # print(self.name) # return "sssss" # # @staticmethod #静态方法定义,通过类调用,相当于函数 # def f1(x): #参数可有可无 # print(x+"==lllllll") # # @classmethod #类方法定义 # def f2(cls): #cls 参数必须有,是类名,通过类调用 # print(cls) # # @property #属性定义 通过Foo.f3调用 # def f3(self): #self必须有 # return self.name + 1 # # @f3.setter #给属性传值 通过 Foo.f3 = 123 # def f3(self,value): # print(value) # # @f3.deleter #属性删除,并不是要删除f3,只是调用了f3,执行代码为pass(可以是任意代码) 通过del Foo.f3 # def f3(self): # pass # # # class shuxing: # # def f1(self): # pass # # def f2(self,value): # print(value) # # def f3(self): # pass # # def __getitem__(self, item): # pass # # def __setitem__(self, key, value): # pass # # def __delitem__(self, key): # pass # # # foo = property(fget=f1,fset=f2,fdel=f3) #另一种属性定义方式,fget fset fdel 是固定关键字 # #注意:默认规则 静态字段要通过类访问;普通字段通过对象访问 # obj = Foo() # print(Foo.f1("iiiii")) #静态方法调用 # print(obj.show()) #普通方法调用 # Foo.f2() #类方法调用 # print(Foo.f3) #属性调用,不加括号 # d = Foo.__dict__ # print(type(d),d) #扩展字典,增加字典有序的属性,借助列表 #字典可以赋值,可以打印 class MyDict(dict): def __init__(self): self.li = [] super(MyDict,self).__init__() def __setitem__(self, key, value): self.li.append(key) super(MyDict, self).__setitem__(key, value) def __str__(self): t = [] # ml = super(MyDict,self).get() for k in self.li: v =self.get(k) t.append("‘%s‘:%s" %(k,v)) return "{" + ",".join(t) + "}" d = MyDict() # d2 = MyDict() d["k1"] = 123 d["k2"] = 456 d["k3"] = 45611 print(d)
以上是关于python3学习之类成员扩展父类方法的功能的主要内容,如果未能解决你的问题,请参考以下文章