首页 > 其他分享 >面向对象-其他内容

面向对象-其他内容

时间:2022-12-07 00:13:27浏览次数:28  
标签:对象 Dog tooth 面向对象 实例 内容 其他 print 属性

一、面向对象三大特征

  封装

    将属性和方法书写到类的里面的操作即为封装

    封装可以为属性和方法添加私有权限

  继承

    子类默认继承父类的所有属性和方法

    子类可以重写父类属性和方法

  多态

    传入不同的对象,产生不同的结果

二、多态

  2.1 了解多态

    多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。

    1)定义:多态是一种使用对象的方法,子类重写父类方法,调用不同子类对象的相同父类方法,

        可以产生不同的执行结果。

    2)好处:调用灵活,有了多态,更容易编写出通用的代码,做出通用的编程,以适应需求的不断变化。

    3)实现步骤:

        1 定义父类,并提供公共方法

        2 定义子类,并重写父类方法

        3 传递子类对象给调用者,可以看到不同子类执行效果不同。

  2.2 体验多态

# 需求:警务人员和警犬一起工作,警犬分2种:追击敌人和追查毒品,携带不同的警犬,执行不同的工作

# 1. 定义父类,提供公共方法:警犬 和 人
class Dog(object):
    def work(self):  # 父类提供统一的方法,哪怕是空方法
        pass

# 2. 定义子类,子类重写父类方法:定义2个类 表示不同的警犬
class ArmyDog(Dog):  # 继承Dog类
    def work(self):  # 子类重写父类同名方法
        print('追击敌人')

class DrugDog(Dog):
    def work(self):
        print('追查毒品')

# 3. 定义人类
class Person(object):
    def work_with_dog(self, dog):  # 传入不同的对象,执行不同的代码,即不同的work函数
        dog.work()

# 4. 创建对象,调用不同的功能,传入不同的对象,观察执行结果
ad = ArmyDog()
dd = DrugDog()

daqiu = Person()
daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)

三、类属性和实例属性

  3.1 类属性

  3.1.1设置和访问类属性

    类属性就是  类对象  所拥有的属性,它被  该类的所有实例对象  所共有

    类属性可以使用  类对象  或  实例对象  访问

# 1. 定义类,定义类属性
class Dog(object):
    tooth = 10

# 2. 创建对象
AA = Dog()
BB = Dog()

# 3. 访问类属性: 类 和 对象
print(Dog.tooth)  # 10; 类访问
print(AA.tooth)  # 10; 对象访问
print(BB.tooth)  # 10; 对象访问

  类属性的优点:

    1. 类的实例  记录的某项数据  始终保持一致时,则定义类属性。

    2. 实例属性  要求  每个对象  为其  单独开辟一份内存空间  来记录数据,而  类属性  为全类所共有,

      仅占用一份内存,更加节省空间。

 

  3.1.2 修改类属性

  类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了一个实例属性。

class Dog(object):
    tooth = 10

AA = Dog()
BB = Dog()

# 1. 修改类属性;类.类属性 = 值
# Dog.tooth = 20
# print(Dog.tooth)  # 20
# print(AA.tooth)  # 20
# print(BB.tooth)  # 20

# 2. 测试通过对象修改类属性
BB.tooth = 200
print(Dog.tooth)  # 10
print(AA.tooth)  # 10
print(BB.tooth)  # 200
# 不能通过对象修改属性,如果这样操作,实测是创建了一个实例属性

  3.2 实例属性

class Dog(object):
    def __init__(self):
        self.age = 10

    def info_print(self):
        print(self.age)

AA = Dog()
print(AA.age)  # 10
# print(Dog.age)  # 报错,实例属性不能通过类访问
AA.info_print()  # 10

四、类方法和静态方法

  4.1 类方法

  4.1.1 类方法特点

    1. 第一个形参是类对象的方法

    2. 需要用装饰器@classmethod 来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。

  4.1.2 类方法使用场景

    1.当方法中  需要使用类对象(如访问私有类属性等)时,定义方法。

    2. 类方法一般和类属性配合使用

# 1. 定义类:私有类属性, 类方法获取这个私有类属性
class Dog(object):
    __tooth = 10
    # 定义类方法
    @classmethod
    def get_tooth(cls):
        return cls.__tooth

# 2. 创建对象,调用类方法
AA = Dog()
result = AA.get_tooth()
print(result)

  4.2 静态方法

  4.2.1 静态方法特点

    1. 需要通过装饰器@staticmethod 来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象

    (形参没有self/cls)。

    2.静态方法  也能够通过  实例对象  和  类对象  去访问。

  4.2.2 静态方法使用场景

    1. 当方法中  既不需要使用实例对象(如实例对象、实例属性),也不需要使用类对象(如类属性、类方法、

      创建实例等)时,定义静态方法。

    2. 取消不需要的参数传递,有利于  减少不必要的内存占用和性能消耗

# 1. 定义一个类,定义静态方法
class Dog(object):
    @ staticmethod
    def info_print():
        print('静态方法')

# 2. 创建对象
AA = Dog()

# 3. 调用静态方法,类  和  对象
AA.info_print()

Dog.info_print()

 

标签:对象,Dog,tooth,面向对象,实例,内容,其他,print,属性
From: https://www.cnblogs.com/yz-b/p/16951290.html

相关文章