python_类 对象 属性

1, 类 (class)

类的概念表示某种对象的集合,用于表示某一种相同对象的模板。例如:人作为一个类 由这个“人”类定义出来的内容就是这个类定义出来的对象,类还拥有属性和功能,属性即类本身的一些特性,如人类有名字、身高和体重等属性,而具体值则会根据每个人的不同;功能则是类所能实现的行为,如人类拥有吃饭、走路和睡觉等"""

 

"""
属性递归学习 两个定义的类之间需要用两行空白进行隔开
1,定义动物类Animals 公共属性包括:类型:kind  颜色:color  公共方法: eat和sleep
2,定义Dog(狗)类,继承Animal类公共属性
3,定义Xtq(哮天犬)类,继承Dog类。
备注:子类会继承父类的方法,并且会继承”祖父“类的方法,例如:Xtq类会继承Dog类的属性,还会继承Animals类的属性
4,重写父类定义的方法,只需要在子类重新定义父类的方法即可重写。
5,扩展父类的方法,使用super()方法,可以执行父类的方法。
5,定义Cat类,继承Animals类的方法,不能调用狗类的方法,实现了不同类型相互隔离。
"""


class Animals():

    def __init__(self, kind, color):
        self.kind = kind
        self.color = color

    def __str__(self):  # __str__方法用来描述对象内容,用return进行返回,print对象输出描述内容
        return ("这是%s的%s" % (self.color, self.kind))

    def eat(self):
        print("%s的%s在吃饭" % (self.color, self.kind))

    def sleep(self):
        print("%s的%s在睡觉" % (self.color, self.kind))


class Dog(Animals):  # 创建狗类,增加犬吠功能,继承Aninals方法,避免重复定义相同方法,减少重复代码。

    def bark(self):
        print("%s的%s在犬吠" % (self.color, self.kind))  # 可直接使用父类Animials里定义的color方法和kind方法


class Xtq(Dog):

    def change(self):
        print("我是哮天犬,我会变身")

    def bark(self):
        # 更改父类bark方法执行的内容,重新定义bark方法。
        print("%s的%s是哮天犬,犬吠声是:嘤嘤嘤。。。。" % (self.color, self.kind))
        # 继续执行父类的bark方法。
        super().bark()



class Cat(Animals):

    def climb(self):
        print("%s的%s在爬树" % (self.color, self.kind))

# 创建小黄狗对象,会犬吠。
yellow_dog = Dog("", "黄色")  # 使用Dog类创建对象
print(yellow_dog)
yellow_dog.eat()  # 可调用Animals里面的方法
yellow_dog.sleep()  # 可调用Animals里面的方法
yellow_dog.bark()  # 可直接调用Dog类的方法

# 创建红色哮天犬对象,会变身。
xtq = Xtq("","红色")
xtq.change()
xtq.bark()  # 使用xtq类的bark方法,不执行Dog类的bark方法

# 创建小黑猫对象,会爬树. 只能使用Animals类的方法,不可使用Dog类的方法,实现了相互隔离。
black_cat = Cat("", "黑色")
black_cat.eat()
black_cat.climb()

 2, 私有属性

私有属性和私有方法,只能被自己类里面调用,无法被其他继承的子类所调用。

class A():

    def __init__(self):
        self.num1 = "1"  # 共有属性
        self.__num2 = "2"  # 用self.__可以定义私有属性

    def __str__(self):
        return ("共有属性数字为:%s\n私有属性数字为%s" % (self.num1, self.__num2 ))  # 私有属性只能定义的类里面自己使用,其他类无法调用


class B(A):
    def __test(self):  # 使用def.__定义私有方法,无法被外部调用。可以使用特殊命令调用
        print("输出数字")

test = B()

print(test)

 3,  单例涉及模式,__new__方法实现

多个对象使用一个内存地址空间,并且可实现初始化一次的需求:

class Music(object):
    instance = None  # 定义类属性,用来保存对象的地址空间
    init_flag = False  # 定义初始化属性,默认未执行初始化
    def __new__(cls, *args, **kwargs):
        # 判断类属性是否为空,如果为空,调用父类的__new__方法,为第一个对象分配内存空间
        if cls.instance is None:  # 判断是否为None 用is来判断
            cls.instance = super().__new__(cls)  # 调用父类__new__方法,并传递cls对象,分配内存空间,保存到instance。
        return cls.instance  # 将分配的内存地址返回给python解释器


    def __init__(self,player):
        self.player = player
        if Music.init_flag: # 判断类属性是否为真,如果为真,直接返回,不执行初始化动作。如果为假,执行下一步动作
            return
        print("执行初始化")
        Music.init_flag = True



test = Music("qq音乐")
print(test)

test1 = Music("百度音乐")
print(test1)

 

posted @ 2022-01-07 10:51  小菜鸟起飞ing  阅读(258)  评论(0编辑  收藏  举报