私有化
class A():
def __init__(self,name,age):
self.name=name
self._age=age#私有化属性,外部不能直接访问
def shown(self):
print(self._age)
def __shou(self):
print('w134')
def shou__(self):
print('h170')
t=A('迪欣欣',19)
print(t.name)
# print(t._age) 私有化属性无法从外部直接访问
t.shown() #通过对象未私有化的方法访问
#私有调用
class Sdf():
def ret(self):
return self.__age #返回私有属性的值
def xx(self,age):
if 0<age<120:
self.__age=age #满足条件时将变量age的值赋予私有属性_age
else:
self.__age=0 #不满足时,将私有属性__age的值变成0
t=Sdf()
t.xx(12)
print(t.ret())
t.xx(134)
print(t.ret())
class B():
def getName(self,name):
if len(name)<5:
self.new_name=name
else:
self.new_name=name[0:5]
def setName(self):
return self.new_name
t=B()
t.getName('qwertyu')
print(t.setName())
t.new_name='123456789'
print(t.setName())
#查询类的属性
class A():
def setAge(self,age):
self.__age=age
self.name='黄月英'
def getAge(self):
return self.__age
t=A()
t.setAge(29)
print(t.getAge())
t._age=19
print(t._age)
print(t._A__age)
t._A__age=12
print(t._A__age)
print(t.__dict__)
#类的继承
class People():
def dance(self):
print('Dd')
class A():
def xx(self):
print('xx')
class Student(People,A):
def sing(self):
print('Ss')
zs=Student()
zs.dance()
zs.sing()
zs.xx()
重载
class Animal():
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def eat(self):
print('吃饭')
def sleep(self):
print('睡觉')
def sound(self): #被重载
print('What the fox say?',end=' ')
class Dog(Animal):
def sound(self): #重载,与父类同名的方法
super().sound()#调用父类方法
print('汪汪汪')
class Cat(Animal):
def sound(self):
super().sound() # 调用父类方法
print('喵喵喵')
g=Dog('哈士奇','雄性',1)
g.eat()
g.sleep()
g.sound()
c=Cat('挪威森林猫','雌性',2)
c.eat()
c.sleep()
c.sound()
# print(Dog.__bases__)
# print(Animal.__bases__)
# a=Animal('QD','QWE',9)
# a.sound()
几类特殊的继承
# class A():
# def __init__(self,x):
# self.x=x
#
# class B(A):
# def __init__(self,x,y):
# self.x=x
# self.y=y
# def shown(self):
# print(self.x)
#
# t=B(1,2)
# t.shown()
# class A():
# def __init__(self,x):
# self.x=x
#
# class B(A):
# def shown(self):
# print(self.x)
#
# t=B(1)
# t.shown()
# class A():
# pass
#
#
# class B(A):
# pass
#
#
# t = B()
class A():
pass
class B(A):
def __init__(self,x,y):
self.x=x
self.y=y
def shown(self):
print(self.x)
t=B(1,2)
t.shown()
类,属性的创建
# class A():
# pass
#
# class B(A):
# pass
#
# A.ww=123
# print(A.ww)
# print(B.ww)
# class A():
# a=1
# pass
#
# class B(A):
# a=2
# pass
#
# print(A.a)
# print(B.a)
# print(A.a)
class A():
a=1
pass
class B(A):
pass
B.a=4
print(A.a)
print(B.a)
类的访问
class A():
num=4
a=90
class B(A):
num=10
t=B()
print(t.num)
print(super(B,t).num)#访问对象t的类B的父类的属性num
print(super(B,t).a)#访问对象t的类B的父类的属性a
继承调用顺序
class A():
def a1(self):
print('a1')
def t1(self):
print('at1')
class B():
def b1(self):
print('b1')
def t1(self):
print('bt1')
class C(A,B):
def c1(self):
print('c1')
a=C()
a.t1()#当调用的方法在多个不同父类中存在相同名字的方法时,根据集成时括号内写的先后顺序调用
print(C.mro())
钻石继承
class A():
def __init__(self):
print('A开始')
print('A结束')
class B(A):
def __init__(self):
print('B开始')
super().__init__()
print('B结束')
class C(A):
def __init__(self):
print('C开始')
super().__init__()
print('C结束')
class D(B,C):
def __init__(self):
print('D开始')
super().__init__()
print('D结束')
t=D()
print(D.mro())
多态
class Dog():
def sound(self):
print('汪!')
class Cat():
def sound(self):
print('喵~')
class Pig():
def sound(self):
print('哼哼哼')
def xx(x):
x.sound()
d=Dog()
c=Cat()
p=Pig()
xx(d)
xx(c)
xx(p)
print(xy(0))
作业
class Dog(object):
def __init__(self, name):
self.name = name
def game(self):
print('%s 玩耍'% self.name)
class Xiaotiandog(Dog):
def game(self):
print('%s 飞走了'% self.name)
class Humen(object):
def __init__(self,name):
self.name=name
def game_with_dog(self,dog):
print('%s %s'% (self.name,dog.name))
dog.game()
xt_dog = Xiaotiandog('哮天犬')
els=Humen('二郎神')
els.game_with_dog(xt_dog)