代码语言:javascript复制
##类成员包括:
#字段:静态字段、普通字段 字段也可以理解为“变量”
#方法:普通方法、静态方法、类方法;所有方法属于类 方法也可以理解为“函数”
#属性:具有方法的定义形式,具有字段访问形式 用字段的访问方式调用方法,就需要定义“属性”
#当不想创建对象访问类中方法时,方法需要是静态方法
##成员修饰符
#公有字段 内外都可以访问
#__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)