一、类的定义
# 定义类
class People:
# 定义基本属性
name = ""
age = 0
# 定义私有属性
_sex = ""
# 定义构造方法
# ps:self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类
# self 不是 python 关键字,我们把他换成 mmp 也是可以正常执行的
def __init__(self, name, age, sex):
self.name = name
self.age = age
self._sex = sex
# 定义方法
def speak(self):
print("{name}说,我叫{name},今年{age}岁".format(name=self.name, age=self.age))
二、类实例化
# 实例化
x = People("李四", 12, "男")
# 调用类方法
x.speak()
三、继承
##继承
class Student(People):
# 多态
grade = 0
def __init__(self, name, age, sex, grade):
# 调用父类的构造方法
People.__init__(self, name, age, sex)
self.grade = grade
# 覆盖父类的方法
def speak(self):
print("{name}说,我是一个学生,我在读{grade}年级,我今年{age}岁".format(name=self.name, grade=self.grade, age=self.age))
stu = Student("泰迪", 12, "男", 2)
stu.speak()
四、多继承
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。
所以,方法名同,默认调用的是在括号中排前地父类的方法
# 人类
class People:
name = ""
age = 0
def __init__(self, name, age):
self.age = age
self.name = name
def speak(self):
print("my name is {name},{age} years old.".format(name=self.name, age=self.age))
# p = People("LiLei", 23)
# p.speak()
# 演说家类
class Speaker:
topic = ""
def __init__(self, topic):
self.topic = topic
def speak(self):
print("I am a speaker,topic is {topic}".format(topic=self.topic))
class sample1(People, Speaker):
def __init__(self, name, age, topic):
People.__init__(self, name, age)
Speaker.__init__(self, topic)
class sample2(Speaker, People):
def __init__(self, name, age, topic):
People.__init__(self, name, age)
Speaker.__init__(self, topic)
test1 = sample1("LiLe", 23, "NBA")
test1.speak()
test2 = sample2("LiLe", 23, "NBA")
test2.speak()
输出结果
test1=>my name is LiLe,23 years old.
test2=>I am a speaker,topic is NBA
五、方法重写
如果父类方法的功能不足,可以在子类中重新编写这个方法
class car:
def run(self):
print("the fastest Speed 20 km/h")
class SportsCar(car):
def run(self):
print("the fastest Speed 200 km/h")
test = SportsCar()
test.run()
super(SportsCar,test).run()
通过super 则可以通过子类实例,调用已经被覆盖的父类方法
六、类属性与方法
私有属性
两个下划线开头,声明该属性为私有
私有的字段不能在类外被访问
类的方法
在类地内部,使用 def
关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self
,且为第一个参数,self
代表的是类的实例。
self
的名字并不是规定死的,也可以使用 this
,但是最好还是按照约定是用 self
。
私有方法
__eat:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__eat
类的专有方法
init : 构造函数,在生成对象时调用
del : 析构函数,释放对象时使用
repr : 打印,转换
setitem : 按照索引赋值
getitem: 按照索引获取值
len: 获得长度
cmp: 比较运算
call: 函数调用
add: 加运算
sub: 减运算
mul: 乘运算
div: 除运算
mod: 求余运算
pow: 乘方
ps:类的专有方法一样是可以被重载
网友评论