python类和对象
一:1、面向对象程序设计(Object Oriented Programming,OPP)的思想主要针对大型软件设计而提出,使得软件设计更加灵活,能够更好的支持代码复用和设计复用,并且使得代码具有更好的可读性和可扩展性。
2、对象 = 属性 + 方法
3、类是创建对象的模板,是对对象的抽象和概括,而使用类创建的对象是这个类的一个实例。
二:1、定义一个Person类:
class Person:
num = 1 #类属性
def sayhello(self):#方法
print(“Hello”)
对象的创建:
对象名 = 类名()
例如,定义一个Person的对象p:
p = Person()
p.sayhello()
运行结果:
Hello
2、init()方法:
作用:使用__init__()方法后在调用这个类时,从外界传入的东西写在类名后面的括号中即可。
三:我的错误
1、
定义一个类之后,在创建一个对象时输入的参数个数必须与定义类时定义的参数个数一致,上图中类中定义了两个参数a 和 b,而创建cc对象时只输入了一个参数,所以出现错误。
2、
不能在一个类中同时定义两个参数个数不同的属性。
3、
封装:
# 封装
class Student:
def __init__(self, name, gender,u):
self.name = name
self.__u = u
self.gender = gender if gender == "女" or gender == "男" else "男"
self.__age = 18
@property
def age(self):
return self.__age
#设置赋值操作
@age.setter
#如果age输入不在0~18之间,则变为18岁。
def age(self, value):
if value < 0 or value > 130:
# self.__age = 18
print("年龄输入不合格")
else:
self.__age = value
def show(self):
print(f"我叫{self.name},性别{self.gender},今年{self.__age}岁。")
# 封装
stu1 = Student("花花","女",9)
stu1.age = 1099
print(stu1.age)
stu1.show()
输出:(年龄1099岁,不正确,会改为18)
继承:
#继承
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
print(f"大家好,我叫{self.name},今年{self.age}岁",end=",")
class Teather(Person):
def __init__(self,name, age,kemu):
#调用父类中的初始化方法(这是方法1)
super().__init__(name, age)
self.kemu = kemu
# 父类方法重写
def show(self):
super().show()#继承父类的show()方法
print(f"我来自猪头岛,我教{self.kemu}。")#添加新的内容
class Docter(Person):
def __init__(self, name,age, keshi):
# 调用父类中的初始化方法(这是方法2)
Person.__init__(self, name, age)
self.keshi = keshi
#父类方法重写
def show(self):
print(f"大家好我叫{self.name},今年{self.age}岁,我是{self.keshi}医生。")
多重继承:
#多重继承
class Fathera:
def __init__(self,name):
self.name = name
def showa(self):
print(f"这是父类a,我叫{self.name}")
class Fatherb:
def __init__(self,age):
self.age = age
def showb(self):
print(f"这是父类b,我今年{self.age}岁")
class Son(Fathera, Fatherb):
def __init__(self,name, age, place):
# 调用父类中的初始化方法(这时不能再用 super() 方法)
Fathera.__init__(self, name)
Fatherb.__init__(self, age)
self.place = place
def showson(self):
super().showa()#继承父类的showa()方法
super().showb()#继承父类的showb()方法
print(f"我来自{self.place}。")#添加新的内容
继承时子类会继承父类的全部非私有属性和方法,如果子类中需要新的属性或方法时,需要用与父类相同的名字来覆盖父类中的属性和方法。
3、的正确代码
子类的属性中需要一个参数而父类中却有两个,所以子类要用与父类相同的__init__()名字覆盖父类中的属性。