class Test(object):
'''类属性'''
count = 0
def __init__(self,prefix):
self._prefix = prefix
Test.count += 1
'''直接通过类名来调用的方法叫做类方法也叫静态方法 ,不需要先创建实例,可以定义成这个类的静态属性,通过关键字@staticmethod来标记。'''
@staticmethod
def version():
return "1.0"
'''使用 @property 可以为类定义一个只读属性。这种属性只会有一个 getter 方法,而没有 setter 方法,从而禁止修改该属性的值。'''
@classmethod
def getSubClass(cls, prefix):
return cls(prefix)
'''获取类属性 基数当前一共生成了多少个子类'''
@classmethod
def getCount(cls):
return cls.count
@property
def prefix(self):
return self._prefix
'''可以通过 @property 和 @<property_name>.setter 组合来定义可读写属性。在 setter 中可以加入条件检查或其他逻辑,确保属性符合要求'''
@prefix.setter
def prefix(self, value):
self._prefix = value
'''@property 可以将一个方法定义为计算属性,通过一定的逻辑计算返回一个值,而不需要存储该值。'''
def console(self, content):
print(f"{self._prefix} : {content}")
test = Test('Hello World 1')
test.console(2)
test.prefix = 'Hello World 3'
print('哈哈哈',test.prefix)
test.console(4)
print(Test.version())
# 使用静态方法直接获取一个新的子类
test2 = Test.getSubClass('我是一个Test子类')
test2.console('Hello World 5')
print(Test.getCount())
class Test_Sub(Test):
def __init__(self, prefix):
super().__init__(prefix)
def sub_function(self):
return f"{self._prefix}: sub function"
test_sub = Test_Sub.getSubClass('我是一个继承Test的Test_Sub子类')
print('哈哈哈',test_sub.prefix)
print(Test_Sub.getCount())
'''
Hello World 1 : 2
Hello World 3 : 4
1.0
我是一个Test子类 : Hello World 5
2
我是一个继承Test的Test_Sub子类
3
'''
# 此处并没有打印 print(test_sub.prefix) Test_Sub不是继承自Test 那么test_sub实例应该有prefix?
'''
解释:
Test_Sub 的构造函数(__init__)缺失
修改:
class Test_Sub(Test):
def __init__(self, prefix):
super().__init__(prefix) # 调用父类的构造函数,初始化 prefix
def sub_function(self):
return f"{self._prefix}: sub function"
'''
本站资源多为网络收集,如涉及版权问题请及时与站长联系,我们会在第一时间内删除资源。
本站用户发帖仅代表本站用户个人观点,并不代表本站赞同其观点和对其真实性负责。
本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
本站资源大多存储在云盘,如发现链接失效,请及时与站长联系,我们会第一时间更新。
转载本网站任何内容,请按照转载方式正确书写本站原文地址。
评论 (0)