一、类的方法
(1)实例方法(方法也称函数)【常用】
定义:在类里面,需要对类进行实例化之后才能调用的方法,默认传参实例本身,没有修饰符
语法:
def 方法名(self):
方法体
调用:
在类外部:实例.方法名()
在类内部:self.方法名()
例子:
class Dog: # 实例方法 def eat(self): print(‘狗狗吃饭‘) # 实例方法 def sleep(self): self.eat() # 在类内部调用eat实例方法 print(‘狗狗睡觉‘) if __name__ == ‘__main__‘: dog = Dog() # 实例化 dog.sleep() dog.eat() # 在类外部实例化后调用
输出结果:
狗狗吃饭
狗狗睡觉
狗狗吃饭
(2)类方法
定义:在类里面,无需对类进行实例化便可调用的方法,默认传参类本身,有修饰符@classmethod
语法:
@classmethod
def 方法名(cls):
方法体
调用:
在类外部:类.方法名() 或 实例.方法名()
在类内部:self.方法名()
例子:
class Dog: # 类方法 @classmethod def eat(cls): print(‘狗狗吃饭‘) # 实例方法 def sleep(self): self.eat() # 在类内部调用eat类方法 print(‘狗狗睡觉‘) if __name__ == ‘__main__‘: Dog.eat() # 类调用类方法 dog = Dog() dog.eat() # 实例调用类方法 dog.sleep()
输出结果:
狗狗吃饭
狗狗吃饭
狗狗吃饭
狗狗睡觉
(3)静态方法
定义:在类里面,无需对类进行实例化便可调用的方法,且无需传参便可调用,有修饰符@staticmethod
语法:
@staticmethod
def 方法名():
方法体
调用:
在类外部:类.方法名() 或 实例.方法名()
在类内部:self.方法名()
例子:
class Dog: # 静态方法 @staticmethod def eat(): print(‘狗狗吃饭‘) # 实例方法 def sleep(self): self.eat() # 在类内部用实例本身调用eat静态方法 print(‘狗狗睡觉‘) if __name__ == ‘__main__‘: Dog.eat() # 在类外部用类本身调用静态方法 dog = Dog() dog.eat() # 在类外部用实例调用静态方法 dog.sleep()
输出结果:
狗狗吃饭
狗狗吃饭
狗狗吃饭
狗狗睡觉
注:静态方法和类方法相似,不同点在于静态方法默认无需传参,类方法默认传参类本身。另外,静态方法没有用到类的属性和其它方法,所以,静态方法和当前类的相关性很低,某些情况下可以作为独立的函数独立出来。
(4)私有方法
定义:在类里面,仅类内部可进行调用,类外部无法访问,传参实例本身,无修饰符
语法:
def __方法名(): # 注意方法名前面是两条下划线
方法体
调用:
在类内部:self.__方法名()
例子:
class Test: def __init__(self, num1, num2): self.num1 = num1 self.num2 = num2 def __test01(self): return self.num1 + self.num2 def __test02(self): return self.num1 * self.num2 def test03(self): print(‘相加的结果是:‘, self.__test01()) print(‘相乘的结果是:‘, self.__test02()) if __name__ == ‘__main__‘: test = Test(3, 5)
输出结果:
相加的结果是: 8
相乘的结果是: 15
使用场景:私有方法一般作为实例方法的辅助作用,不对外展示。
二、类的特性
(1)封装
定义:隐藏功能实现的内部细节,对外仅提供接口,传递必要的参数即可实现想要的结果,就称为封装。例如函数、类等都是封装的一种,生活中的封装如取款机、计算器等也是封装。
(2)继承
定义:子类继承父类,子类无需重新定义父类的属性和方法便拥有了父类的属性和方法(私有属性和私有方法除外),这就是继承。
语法:
class Father:
父类属性和方法
class Son(Father):
pass
例子:
class Father: money = ‘100万‘ __myself = ‘衣服‘ def drive(self): print(‘我会开车‘) def __fly_a_plane(self): print(‘我会开飞机‘) class Son(Father): # Son类继承了Father类的money属性和drive方法,私有属性__myself和私有方法__fly_a_plane无法继承 pass if __name__ == ‘__main__‘: son = Son() print(f‘我有{son.money}‘) # 可以访问父类的money属性 son.drive() # 可以调用父类的drive方法
输出:
我有100万
我会开车
(3)多态【了解,在Python中多态不严谨】
原文:https://www.cnblogs.com/abing01/p/15027627.html