面向对象,封装,继承,多态

class Student():
    count=0
    def __init__(self,name,age,address):
        self.name=name
        self.age=age
        self.address=address
        Student.count+=1
    def pt(self):
        print(self.name,self.age,self.address)
zs=Student('张三',18,'北京')
f=open('a.txt','w')
f.write(str(Student.count))
f.write(':')
buff=dict(name=zs.name,age=zs.age,address=zs.address)
f.write(str(buff))
f.write('\n')

ls=Student('张二',28,'上海')
f.write(str(Student.count))
f.write(':')
buff=dict(name=ls.name,age=ls.age,address=ls.address)
f.write(str(buff))
f.write("\n")

ww=Student('张大',38,'北京')
f.write(str(Student.count))
f.write(':')
buff=dict(name=ww.name,age=ww.age,address=ww.address)
f.write(str(buff))
f.close()

f=open('a.txt','r')
line=f.readline()
obj=[]
while len(line)>0:
    zidian=eval(line[2:])  # zidian=eval(line[2:].strip('\n))
    x=Student(zidian['name'],zidian['age'],'中国'+zidian['address'])
    obj.append(x)
    line=f.readline()
f.close()

for x in obj:
    x.pt()


class Student():
    count=0
    def __init__(self,name,age,address):
        self.name=name
        self.age=age
        self.address=address
        Student.count+=1
    def pt(self):
        print(self.name,self.age,self.address)
zs=Student('张三',18,'北京')
f=open('a.txt','w')
f.write(str(Student.count))
f.write(':')
buff=dict(name=zs.name,age=zs.age,address=zs.address)
f.write(str(buff))
f.write('\n')

ls=Student('李四',28,'上海')
f.write(str(Student.count))
f.write(':')
buff=dict(name=ls.name,age=ls.age,address=ls.address)
f.write(str(buff))
f.write('\n')

ww=Student('张大',38,'北京')
f.write(str(Student.count))
f.write(':')
buff=dict(name=ww.name,age=ww.age,address=ww.address)
f.write(str(buff))
f.close()

f=open('a.txt')
content=f.readline()
obj=[]
while len(content)>0:
    zd=eval(content[2:].strip('\n'))
    x=Student(zd['name'],zd['age'],'中国'+zd['address'])
    # print(type(x))
    # for x2 in x:
    #     print(x2)

    obj.append(x)

    # buff=[zd['name'],zd['age'],'中国'+zd['address']]
    # obj.append(buff)
    content=f.readline()
f.close()

for x in obj:
    x.pt()
#
# f.open('a.txt','r')
# line=f.readline()
# obj=[]
# while len(line)>0:
#     zd=eval(line[2:].strip('\n'))# 字典
#     zd['name']
#     line=f.readline()
#**********************************************

class People():
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    def say(self):
        print(self.name,'大家好,我今年%d岁'%self.age)
class Student(People):
    def __init__(self,name,age,sex,score):
        super().__init__(name,age,sex) # 这里讲继承,子类中调用父类属性的方法。即 super().
        self.score=score
    def talk(self):
        print(self.name,'我考了%d分'%self.score)
zs=Student('张三',18,'男',99)
zs.say() # 这里说明子类调用父类方法
zs.talk()
#********************************************

class People():
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        self.__yan=2.0
        print(self.__yan)
    def say(self):
        print(self.name,"大家好,我今年%d岁"%self.age)
        print(self.__yan)
class Student(People):
    def __init__(self,name,age,sex,score):
        super().__init__(name,age,sex)
        self.score=score
    def talk(self):
        print(self.name,'我考了%d分'%self.score)
zs=Student('张三',18,'男',99)
# print(zs.__yan)
# print(People.__yanzs.say()   # 私有的属性,不能通过对象zs.__yan直接访问,但是可以通过方法访问 __yan只能出现在class People()那段代码里面
zs.talk()
#********************************************

class A():
    def AA(self):
        print('AA')
class B():
    def BB(self):
        print('BB')
class C(A,B):  # 这里说明子类可以继承多个父类,写法class zilei(fulei1,fulei2,fulei3):
    def CC(self):
        print('CC')
c=C()
c.AA()
c.BB()
c.CC()
#********************************************

class A():
    def AB(self):
        print('AA')
class B():
    def AB(self):
        print('BB')
class C(A,B):
    def AB(self):
        print('CC')
c=C()
c.AB()  # 重载。 子类和父类 方法同名时,使用子类的。
print(C.mro())
#********************************************

class People():
    count=0
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        People.count+=1
    def say(self,n1,n2):
        print(self.name,'的年龄是',self.age)
        print(n1+n2)
class Student(People):
    def __init__(self,name,age,sex,score):
        super().__init__(name,age,sex)
        self.score=score
    def talk(self,n3,n4):
        print(self.name,'的成绩是',self.score)
        print(n3*n4)
zs= Student('张三',18,'男',888)
zs.say(3,4)
zs.talk(2,5)
#********************************************

class People():
    def say(self):
        print('开个玩笑')
class Student(People):
    def say(self):
        print('hhe')
s=Student()
s.say()
#********************************************

class People():
    def say(self):
        print("fu lei")
class Student(People):
    def say(self):
        super().say()  # super().__init__(name,age,sex)  也就是说 super(). 引用父类的属性和方法
        print('zi lei')
s=Student()
s.say()
#********************************************

class A():
    def __init__(self):
        print('A开始')
        print('A结束')
class B(A):
    def __init__(self):
        print('B开始')
        print('B结束')
class C(A):
    def __init__(self):
        print('C开始')
        print('C结束')
class D(B,C):
    def __init__(self):
        print('D开始')
        print('D结束')
d=D()
print(D.mro())

#
D开始
D结束
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
#***********************************************************

class A():
    def __init__(self):
        print('A开始')
        super().__init__()
        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__() # super(). 其中super()就相当于父类,也就是调用父类的东西。这里调用父类的初始化函数,
        print('D结束')
d=D()
print(D.mro())
# 菱形继承。面试题,考试题。你自己看着办。
#***********下面一个是 多态 的例子************************************

class Dog():
    def jiao(self):
        print("汪汪")
class Cat():
    def jiao(self):
        print('喵喵,一起学猫叫')
class Pig():
    def jiao(self):
        print('哼哼')
def jiao(who):
    who.jiao()
d=Dog()
c=Cat()
p=Pig()
jiao(d)
jiao(c)
jiao(p)
#***********************************************

class People():
    def __init__(self,age,sex,name):
        self.__age=age
        self.sex=sex
        self.name=name
    def __sayAge(self):
        print(self.__age,'岁') # 私有属性,只能在类里面用。
    def hehe(self):
        print(self.name)
        self.__sayAge() # 私有的方法,只能在类里面用。
zs=People(age=18,sex='nan',name='张三')
zs.hehe()
# zs.__sayAge() # 私有方法,不能在类外面用。只能在类里面用。所以这里会报错

print(dir(People)) # 查看People里面的方法 和 属性
print(dir(zs))
#***********************************************

class People():
    def __init__(self,name,age,sex):
        self.name=name
        self.__age=age
        self.sex=sex
    def __sayAge(self):
        print(self.__age,'岁')
    def hh(self):
        print(self.name)
        self.__sayAge()
zs=People('张三',18,'nan')
zs.hh()
#zs.__sayAge()
#***********************************************

class A():
    x=10
class B(A):
    pass
class C(A):
    pass
print(A.x) #10
print(B.x)  # 10
print(C.x) # 10
B.x=12
print(A.x) # 10
print(B.x) # 12
print(C.x) # 10
A.x=14
print(A.x) # 14
print(B.x) #12  上面添加属性 B.x=12 , 这时B和A有同名属性x,父类改动A.x=14,子类用自己的
print(C.x) # 14
#***********************************************

class A():
    __slots__ = ('name','age','sex','address','ok') # 输入slot,出来的,作用是限制类的属性,这类的属性最多就这些。
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    def say(self):
        print('say it')
a=A('张三',19,'男')
a.address='山东'
print(a.name,a.age,a.sex,a.address)
a.say()
#***********************************************

class A():
    def __init__(self):
        pass
    @property
    def name(self):
        return self.right_name
    @name.setter
    def name(self,daijiancha_name):
        print('进来了')
        if daijiancha_name.isalpha():
            print("correct")
        else:
            print('wrong type of names')
            self.right_name='hanmeimei'
    def wr_name(self):
        self.name=input("请输入英文名字")
a=A()
a.wr_name()




"""
#***********************************************
# class A():
#     def __init__(self):
#         pass
#     @property # 属性。修饰下面的方法,此符号修饰的函数,当属性使用
#     def data(self): #get方法,获取值
#         return self.right
#     @data.setter
#     def yaoPanDuanDeShuXing(self,canShu): #set设置值
#         print("开始判断")
#         if canShu<18:
#             print('cuowu')
#             self.right=20
#         else:
#             print('zhengque')
#             self.right=canShu
#
#     def aaa(self): # 在这个方法(函数)中
#         self.yaoPanDuanDeShuXing=int(input("请输入:"))
# a=A() # 跳入初始化
# a.aaa()
# print(a.data)
#********************************************


# class Jiancha():
#     def __init__(self):
#         pass
#     @property
#     def data(self):
#         return self.right
#     @data.setter
#     def data(self,wrong_maybe):
#         if wrong_maybe <18:
#             self.right=20
#         else:
#             print("hege")
#             pass
#     def start(self):
#         self.data=int(input("待检查的data"))
# obj=Jiancha()
# obj.start()
#*********************************************

class Lei():
    def __init__(self):
        pass
    @property # 属性。修饰下面的方法,此符号修饰的函数,当属性使用
    def yaoPanDuanDeShuXing(self): #get方法,获取值
        return self.right
    @yaoPanDuanDeShuXing.setter
    def yaoPanDuanDeShuXing(self,canShu): #set设置值
        print("开始判断")
        if canShu<18:
            print('cuowu')
            self.right=20
        else:
            print('zhengque')
            self.right=canShu

    def aaa(self): # 在这个方法(函数)中
        self.yaoPanDuanDeShuXing=int(input("请输入:"))
duixiang=Lei() # 跳入初始化
duixiang.aaa()
print(duixiang.yaoPanDuanDeShuXing)




猜你喜欢

转载自blog.csdn.net/weixin_44675370/article/details/88540051