目录
一、常用魔术方法
所谓魔术方法,就是面向对象过程中方法左右各有两个英文状态下的 “_”的方法
这些方法允许我们定义类的某些操作,比如创建对象、实例化、字符串表示等。它包括以下:
1.__init__方法
创建了一个类后,当我们需要实例化一个对象时,就需要用到这个方法,它的作用在于初始化对象。
你也可以这么理解:
给对象添加属性时,要用init方法。
格式:
def __init__(self,属性1, 属性2,……): self.属性1名 = 属性1 self.属性2名 = 属性2
示例:
2.__str__方法
定义对象的 字符串表示,即当你想打印或查看该对象时,返回一个人类可读的描述。
你也可以这么理解:
输出一串字符串
格式:
def __str__(self): return 你要输出的字符 #示例:f"Person: {self.name}, Age: {self.age}"
比如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person: {self.name}, Age: {self.age}"
# 创建对象
person = Person("Alice", 30)
# 当调用 print(person) 时,会自动调用 person.__str__()
print(person) # 输出 "Person: Alice, Age: 30"
3.__del__方法
定义对象被销毁前要执行的操作。
格式:
def __del__(self): 代码代码
比如,我们想让某对象删除前输出一句话,我们可以如下:
class a:
def __init__(self, name):
self.name = name
def __del__(self):
print(f"{self.name} is being deleted")
# 创建对象
obj = a("Object1")
del obj # 会输出 "Object1 is being deleted"
4.其他方法
除此之外,还有很多方法,比如:add、new、repr等。
这里不作一一赘述。
二、继承
1.概念
在编程中,继承是一种允许我们基于现有代码创建新代码的机制。它是一种使得 新创建的类(称为子类或派生类)可以继承另一个类(称为基类或父类)的属性和方法的 面向对象编程概念。
简单来说:即
一个类(子类)继承另一个类(父类)的属性和方法。
比如我们创建了一个类a,具有很多属性和方法
现在我想再写一个类似a一样的类b,这时我们可以让类b从类a那继承
这样我们就不用再写一遍了。
其他的关于词汇概念:
- 关于那个具有很多属性和方法的,我们称它为基类(父类)
- 关于那个要去继承的,我们称它为子类(派生类)
同样的继承也分为两种:单继承和多继承。
2.单继承
单继承是指一个子类只能直接继承一个父类。也就是说,子类只能有一个父类。
格式:
比如父类是a,子类是b。
class a:
a类的属性和方法代码
class b(a):
b类的属性和方法代码
这样此时,b类中虽然只有关于b类的属性和方法代码,但是,它其实已经同样具备了a类的属性和方法代码。
比如:
上图中,c只实例化了b()
但是调用两个方法时,c都可以输出
3.多继承
多继承是指一个子类可以同时继承多个父类。这样可以让子类拥有多个父类的属性和方法。
格式:
比如父类1是a1,父类2是a2,子类是b
class b(a1, a2): b的其他属性和方法代码
和单继承格式差不多,就是在括号里不同而已。
示例:
我们需要注意,在这些父类当中,最好不要出现相同名字的方法,否则会出现问题,即方法冲突。
也要注意,如果父类a1和父类a2来自于同一个父类A,那我们若是让子类b去继承a1和a2又会出现新问题,即菱形继承问题
三、方法重写
方法重写指的是在子类中重新定义一个与父类同名的方法。
这样就可以实现覆盖父类中某一方法,以实现不同功能。
举个例子:
比如父类a有方法1,2,3以实现不同功能
然后子类b继承了父类a的所有方法
现在我想让b继承方法1,2然后让方法3实现一个不同于a的功能
那就可以在b中写一个和方法3同名的代码,这就是重写
示例:
注意点:方法签名必须一致、不能重写静态方法或类方法
四、多态
多态是面向对象编程中的一个重要特性,指的是同一操作作用于不同对象时,可以有不同的表现形式。即,多态允许不同类型的对象对同一消息作出不同的响应。
举个例子:
你有一个遥控器a,然后房间里有电视b、电脑c、播放器d
其中
a是父类,里面有打开开关的代码
b、c、d是子类
现在,不管你是对着电视、电脑还是播放器按这个按钮,它都能工作,但是每个设备对 “打开开关”这个命令的反应都不一样。
这就是多态。
格式:
列表名 = [子类1(), 子类2(), 子类3(),……]
除此之外,还有最重要的一点是,多态要结合重写。
就是子类的方法名要去覆写父类的
例如:
class a:
def play(self):
print(1)
class b(a):
def play(self):
return "b"
class c(a):
def play(self):
return "c"
class d(a):
def play(self):
return "d"
# 创建实例
j = [b(), c(), d()]
# 使用相同的接口调用不同对象的play方法
for i in j: #遍历列表输出
print(i.play())
#输出b
#输出c
#输出d
感想观看,以上就是全部内容~~