赞
踩
示例代码:
- class Dog(object):
- def work(self): # ⽗类提供统⼀的⽅法,哪怕是空⽅法
- print('指哪打哪...')
-
-
- class ArmyDog(Dog): # 继承Dog类
- def work(self): # ⼦类重写⽗类同名⽅法
- print('追击敌⼈...')
-
-
- class DrugDog(Dog):
- def work(self):
- print('追查毒品...')
-
-
- class Person(object):
- def work_with_dog(self, dog): # 传⼊不同的对象,执⾏不同的代码,即不同的work函数
- dog.work()
-
-
- ad = ArmyDog()
- dd = DrugDog()
- daqiu = Person()
- daqiu.work_with_dog(ad)
- daqiu.work_with_dog(dd)
'运行
运行结果:
示例代码:
- """
- 鸭子类型:在多个类中实现同一个方法,那么这些类就可以看出同一个类型
- """
-
-
- class Cat:
- def say(self):
- print("我是猫....")
-
-
- class Dog:
- def say(self):
- print("我是狗....")
-
-
- class Duck:
- def say(self):
- print("我是鸭子....")
-
-
- # 鸭子类型
- animal = Cat
- animal().say() # 我是猫....
-
- animal = Dog
- animal().say() # 我是狗....
-
- animal_list = [Cat, Dog, Duck]
- for animal in animal_list:
- animal().say()
-
-
- # 我是猫....
- # 我是狗....
- # 我是鸭子....
-
-
- class Student:
- def __init__(self, student_list: list):
- self.student_list = student_list
-
- def __getitem__(self, item):
- return self.student_list[item]
-
-
- cls_student = Student(['aa', 'bb'])
- new_student = ['cc']
-
- student_tuple = ('dd',)
- new_student.extend(student_tuple)
- print(new_student) # ['cc', 'dd']
-
- new_student.extend(cls_student)
- print(new_student) # ['cc', 'dd', 'aa', 'bb']
-
- """
- 只要多个类实现了同一个方法,那么就可以归为一类
- """
-
-
- class Animal:
- def run(self):
- print("动物在跑。。。")
-
-
- class Dog(Animal):
- def run(self):
- print("狗在跑。。。")
-
-
- class Cat(Animal):
- def run(self):
- print("猫在跑。。。")
-
-
- dog = Dog()
- dog.run() # 狗在跑。。。
-
- cat = Cat()
- cat.run() # 猫在跑。。。
- """
- 在多个类中同时继承了一个类并且对父类中的方法进行了重写
- 在每个类中所调用的同一个方法会返回不同的行为,这种情况就是多种形态,即多态
- """
'运行
运行结果:
- class Dog(object):
- tooth = 10
-
-
- wangcai = Dog()
- xiaohei = Dog()
- print(Dog.tooth) # 10
- print(wangcai.tooth) # 10
- print(xiaohei.tooth) # 10
'运行
- class Dog(object):
- tooth = 10
-
-
- wangcai = Dog()
- xiaohei = Dog()
- # 修改类属性
- Dog.tooth = 12
- print(Dog.tooth) # 12
- print(wangcai.tooth) # 12
- print(xiaohei.tooth) # 12
- # 不能通过对象修改属性,如果这样操作,实则是创建了⼀个实例属性
- wangcai.tooth = 20
- print(Dog.tooth) # 12
- print(wangcai.tooth) # 20
- print(xiaohei.tooth) # 12
'运行
- class Dog(object):
- def __init__(self):
- self.age = 5
-
- def info_print(self):
- print(self.age)
-
-
- wangcai = Dog()
- print(wangcai.age) # 5
- # print(Dog.age) # 报错:实例属性不能通过类访问
- wangcai.info_print() # 5
'运行
示例代码:
- class A:
- # 类属性
- a = 1
-
- def __init__(self, b, c):
- # 实例属性
- self.b = b
- self.c = c
-
-
- a = A(2, 3)
-
- print(a.a, a.b, a.c) # 1 2 3
- print(A.a) # 1
-
- # 类对象无法访问实例属性
- # print(A.b, A.c) #AttributeError: type object 'A' has no attribute 'b'
-
- # 对类属性的值进行修改
- A.a = 11
- print(A.a) # 11
- print(a.a) # 11
-
- # 能否使用实例对象修改类属性
- a.a = 22
- print(A.a) # 11
- print(a.a) # 22
- """
- 实例属性无法修改类属性
- 当前代码是通过实例对象创建了一个新的实例属性
- """
'运行
运行结果:
示例代码:
- class Student:
- def __init__(self, name, age, sex):
- self.name = name
- self.age = age
- self.sex = sex
-
- def add_age(self):
- self.age += 1
-
- @staticmethod
- def parse_string_1(stu_info):
- name, age, sex = tuple(stu_info.split(','))
- return Student(name, age, sex)
-
- @classmethod
- def parse_string_2(cls, stu_info):
- name, age, sex = tuple(stu_info.split(','))
- return cls(name, age, sex)
-
- def __str__(self):
- return f"{self.name, self.age, self.sex}"
-
-
- stu = Student('dgw', 18, '男')
- print(stu) # ('dgw', 18, '男')
- stu.add_age()
- print(stu) # ('dgw', 19, '男')
-
- # 类对象可以访问静态方法
- stu2 = Student.parse_string_1('dgw2,25,男')
- print(stu2) # ('dgw2', '25', '男')
-
- stu3 = Student.parse_string_2('dgw3,26,男')
- print(stu3) # ('dgw3', '26', '男')
-
- """
- 实例方法:方法中的第一个参数是self,实例方法可以访问类中的所有属性和方法
- 静态方法:无法直接访问类中的属性
- 类方法:可以被类对象和实例对象调用,类方法可以访问类属性
- """
-
- """
- 使用方法判断:
- 如果当前的需求不需要创建实例对象并且不需要访问实例属性/类属性的情况下,可以使用静态方法
- 如果当前的需求不需要创建实例对象但是需要访问类属性的情况下,可以使用类方法
- 如果需要实例对象并且需要访问类中的所有属性和方法,需要使用实例对象
- """
'运行
运行结果:
- class Dog(object):
- __tooth = 10
-
- @classmethod
- def get_tooth(cls):
- return cls.__tooth
-
-
- wangcai = Dog()
- result = wangcai.get_tooth()
- print(result) # 10
'运行
- class Dog(object):
- @staticmethod
- def info_print():
- print('这是⼀个狗类,⽤于创建狗实例....')
-
-
- wangcai = Dog()
- # 静态⽅法既可以使⽤对象访问⼜可以使⽤类访问
- wangcai.info_print()
- Dog.info_print()
'运行
运行结果:
更多python静态方法使用详情,详见博文:python中静态方法staticmethod用法详解_IT之一小佬的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。