再次学习类_1

类的单继承,重写构造函数

class BaseClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        print('this is BaseClass Fun')
        return self.name

    def set_age(self, age):
        self.age = age

class ClassNoInit(BaseClass):
    #init在子类中可以不定义
    def get_age(self):
        return self.age

class ClassNewInit(BaseClass):
    #重写父类init使用下面方法
    def __init__(self, sex, name, age):
        super().__init__(name, age)
        self.sex = sex

    def get_sex(self):
        return self.sex

    def get_name_new(self):
        #指定基类方法调用
        return BaseClass.get_name(self)


if __name__ == '__main__':
    subInstance1 = ClassNoInit('flagzhang', 36)
    print(subInstance1.get_name())
    subInstance2 = ClassNewInit('man', 'flag', 37)
    print(subInstance2.get_name())
    print(subInstance2.get_sex())
    print(subInstance2.get_name_new())

类的多继承

class BaseClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        print('this is BaseClass Fun')
        return self.name

    def set_age(self, age):
        self.age = age


class BaseClass1:
    def __init__(self, work, sal):
        self.work = work
        self.sal = sal

    def get_work(self):
        return self.work

class MutileBaseClass(BaseClass, BaseClass1):
    #多继承默认super.__init__()只继承第一个父类的构造函数,
    def __init__(self, name, age, work, sal):
        BaseClass.__init__(self, name, age)
        BaseClass1.__init__(self, work, sal)


if __name__ == '__main__':
    mutileBaseInstance1 = MutileBaseClass('flag', 36, 'engineer', 28000)
    print(mutileBaseInstance1.get_work())

dataclass

from dataclasses import dataclass
@dataclass
class Person:
    name: str
    age: int
    work: str

if __name__ == '__main__':
    person1 = Person('flag_dataclass', 36, 'engineer')
    print(person1.name)

类的私有变量

class PrivateAttr:
    #双下划线的属性或者方法在字节编码时会给该对象前面加上一个下划线"_类名"的前缀,所以实例无法访问,可以通过加上"_类名"显式访问
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def get_age(self):
        return self.__age

    def __get_name(self):
        return self.name

if __name__ == '__main__':
    private1 = PrivateAttr('flagzhang_pri', 36)
    print(private1._PrivateAttr__age)
    print(private1.get_age())
    print(private1.get_age())
    print(private1._PrivateAttr__get_name())

 

posted @ 2024-05-11 22:21  flag_HW  阅读(6)  评论(0编辑  收藏  举报