文章目录
python中类、实例化、构造方法、继承、重写等概念的整理笔记
一、关于类:
1、类的定义:
定义:定义该集合中每个对象所共有的属性和方法。
例如:人类可以看作一个类,类有一些属性和功能,例如人类有名字、身高、体重等属性,需要定义每个人的属性值;有说话、走路、喝水等行为,定义说话、喝水的行为即为方法。
class People:
def __init__(self, voice, name='', high=''):
self.name = name # 定义人类的姓名属性
self.high = high # 定义人类的身高属性
self.voice = voice
def say(self): # 定义人类说话的方法
print(self.name, self.voice)
if __name__ == '__main__':
People("小明").say()
People("Sweet").say()
知识补充
(1)关于静态属性:
关于静态属性:
位置:在class下边的直接定义 变量名 = 值 属于静态属性
访问方法:
1.类名.属性名访问
2.类内 self.属性名
3.实例化的对象名.属性名访问
所以实例化的同名类的对象共用一套静态属性和静态方法。
对于私有属性,也就是在构造函数中self.属性名定义的,实例化的对象修改自己的属性后,
不会影响其它的对象,但是静态属性一旦被修改,调用该属性的方法返回的值都会被修改。
class是一个模板,并不存在与内存中,不管创建几个对象,静态属性和方法都只有一套。如图所示:
对象是基于Class创建的,Class不占用内存,只是一套创建规则,
Class中可以包含占用内存的静态属性和静态方法,
所以不论使用那种方法修改类的静态属性,
再次读取后都会改变,也就是所有对象和类模板共用一套静态属性和静态方法。
特别注意的是,不同的类名之间的静态方法和属性是不共用的。
(2)关于类、方法、静态属性、对象的关系图如下:
(3)静态方法的调用方法:
1.类名.方法名
2.实例化的对象名.方法名
非静态方法必须有self:
def speak(self): # 定义人类说话的方法
print(“Chinese”)
2、类的三部分组成:
类由三部分组成:
类的名称:类名
类的属性:指对象的特征(一组数据)
类的方法:允许对象进行操作的方法 (行为/功能)
3、类对象支持两种操作:属性引用 和 实例化。
属性引用的语法:obj.属性
类实例化的语法:obj = 类名()
类中方法的调用:obj.方法名()
二、实例化:
定义:类到对象的过程。
实例化的过程:
1、创建一个实例/对象,实例名 = 类名(参数1,参数2)
2、会先调用__init__构造方法,以初始化对象的各属性,对象默认名字是self(在类内部无法知道对象的名字,self指代对象名)。类的各属性(成员变量)均可以在构造函数中定义,定义时只要加上对象指针即可。
3、执行完__init__方法之后,会将self所指向的内存空间返回给实例化它的地方
三、构造方法
init(self) 是类的初始化方法,也称构造方法。
init(self)在实例化后,会自动调用,而不用手动调用,所以一般把属性设置在_init__()里。
使用方法一:
class People:
def __init__(self):
self.age = 18
if __name__ == '__main__':
xiao_hong = People()
print(xiao_hong.age)
# 输出结果为:18
使用方法二:
带参数引用:
class People:
def __init__(self, value=18):
self.age = value
if __name__ == '__main__':
xiao_hong = People()
print(xiao_hong.age)
子类中重写了构造方法,将覆盖父类的构造方法。
四、继承:
代码参考https://www.cnblogs.com/bigberg/p/7182741.html
继承概念的实现方式主要有2类:实现继承、接口继承。
实现继承是指使用基类的属性和方法而无需额外编码的能力。
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法)。
1、类的继承:
class Person(object): # 定义一个父类
def talk(self): # 父类中的方法
print("talk:hello,hello")
class Chinese(Person): # 定义一个子类, 继承Person类
def walk(self): # 在子类中定义其自身的方法
print("walk:one,two,three")
if __name__ == '__main__':
xiao_ming = Chinese()
xiao_ming.talk() # 调用继承的Person类的方法
xiao_ming.walk() # 调用本身的方法
2、构造函数的继承:
1.经典类的写法: 父类名称.init(self,参数1,参数2,…)
2. 新式类的写法:super(子类,self).init(参数1,参数2,…)
class Person(object):
def __init__(self, name, age, weight):
self.name = name
self.age = age
self.weight = weight
class Chinese(Person):
def __init__(self, name, age, weight, language): # 先继承,在重构
super(Chinese, self).__init__(name, age, weight)
self.language = language # 定义类的本身属性
if __name__ == '__main__':
xiao_ming = Chinese("xiaoming", "18", "100", "Chinese")
print(xiao_ming.name)
print(xiao_ming.age)
print(xiao_ming.weight)
print(xiao_ming.language)
3、子类对父类的重写
定义:子类包含与父类同名的方法的现象被称为方法重写(Override)。
例如:所有的鸟都有fly()方法,麻雀是鸟类的一种,不具备所有鸟类的fly()方法,麻雀是鸟类的子类,所以要具体麻雀fly()方法,要重写鸟类的fly()方法。
class Bird:
def fly(self): # 定义Bird类的fly()方法
print("鸟类作为父类随意飞翔")
class Small_Bird(Bird):
def fly(self): # 重写Bird类的fly()方法
print("作为子类只能低空飞翔")
if __name__ == '__main__':
bird = Bird() # 创建鸟类对象
bird.fly() # 调用鸟类对象的fly()方法
Maque = Small_Bird() # 创建麻雀对象
Maque.fly() # 调用麻雀对象的fly()方法
python中的其他定义可参考以下链接学习:
python中定义详细讲解https://www.cnblogs.com/LearningOnline/p/8512041.html