类(Class):用来描述具有相同的属性和方法的对象的集合。
类的专有方法:
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
class Human: def __init__(self, name, sex): # 公有变量 self.name = name self.sex = sex# 私有变量 self.__name = f'name:{self.name},sex:{self.sex}'
# 私有方法 def __creategotostr(self, place): return f'name:{self.name},sex:{self.sex},go to {place}'
# 公有方法 def showinfo(self): print(self.__name)
def go(self, place): print(self.__creategotostr(place))
# 继承 class HumanCity(Human): def init(self, name, sex, city): # super.init(self,name, sex) Human.init(self, name, sex) self.city = city
# 重写父类 def go(self, place): print(f'name:{self.name},sex:{self.sex},from {self.city} go to {place}')
if name == 'main': human_1 = Human('zhangsan', 'male') human_1.showinfo() human_1.go('sea') human_1.sex # 可以访问 # human_1.__name #不可以访问 # human_1.__creategotostr('') #不可以访问
humancity = HumanCity('lisi', 'male', 'hangzhou') humancity.showinfo() humancity.go('xizang')
#如果有多个继承 # class SubClass(F1,F2,F2): # F1.init(self) # F1.init(self) # F1.init(self) # self.init(self)
#如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。 #子类不重写 init,实例化子类时,会自动调用父类定义的 init。 #https://www.runoob.com/w3cnote/python-extends-init.html
访问已经设定的私有变量
class tst:
def init(self,v):
self.__var = v
self.var = v
t=tst('vvv')
print(t.var)
#vvv
print(t.__var)
#报错
print(t._tst__var)#即可以通过 ._类名+私有变量名,实现访问
#vvv
扩展:
class tst: def init(self,name): self.name=namedef str(self): return 'Your submit:' + self.name
repr=str
#用于for … in循环 def iter(self): return self def getitem(self, item): if item > 10000: raise StopIteration() a,b =1,1 for x in range(item): a,b =b ,a+b return self.name+'-' + str(a)
def getattr(self, item): if item =='parm': return 'I am here'
x= tst('zhangsan') print(x) #Your submit:zhangsan print (x.name) #zhangsan print (x.parm) #I am here print(x[3]) #zhangsan-3

评论