class 中的继承只有 class 方法与模块
Inheritance in class with only class methods vs modules
我定义了两个 class 并且我只是想在我的整个应用程序中使用它们的方法而不实例化它们。我阅读了很多关于此的意见,许多人建议在这种情况下使用模块而不是 classes。公平竞争,但是继承呢?
假设我有一个 class Dog
,另一个 class AgressiveDog
,它继承自 Dog
:
class Dog:
sound = 'Woof'
@classmethod
def bark(cls):
print(cls.sound)
class AgressiveDog(Dog):
@classmethod
def bark(cls):
super().bark()
super().bark()
我会把上面的classes翻译成下面的模块(如果有更好的方法请大声说)。
dog.py
:
sound = 'Woof'
def bark():
print('Woof')
agressivedog.py
:
import dog
def bark():
dog.bark()
dog.bark()
在这种情况下,'modules' 解决此问题的方法优于 classes 吗?
对于模块,我必须为彼此密切相关的事物创建两个单独的 .py 文件,此外,当我在 agressivedog.py
中工作时,我必须始终记住明确使用来自parent (dog.py
).
使用 classes,我可以将两个 classes 放在一个 .py 文件中,我唯一的错误是我不打算实例化那些 classes。我错过了什么?
在你的情况下,没有区别。这里我们说的是代码的可扩展性。假设您有 50 类 个“狗”继承人。因此,你将有 50 个模块,这很糟糕,而且继承层次会很混乱。我在说什么?如果您了解您的结构将被限制为 2-3 个继承人,则使用模块,但为了良好的支持、可测试性和可扩展性,请使用 类.
我定义了两个 class 并且我只是想在我的整个应用程序中使用它们的方法而不实例化它们。我阅读了很多关于此的意见,许多人建议在这种情况下使用模块而不是 classes。公平竞争,但是继承呢?
假设我有一个 class Dog
,另一个 class AgressiveDog
,它继承自 Dog
:
class Dog:
sound = 'Woof'
@classmethod
def bark(cls):
print(cls.sound)
class AgressiveDog(Dog):
@classmethod
def bark(cls):
super().bark()
super().bark()
我会把上面的classes翻译成下面的模块(如果有更好的方法请大声说)。
dog.py
:
sound = 'Woof'
def bark():
print('Woof')
agressivedog.py
:
import dog
def bark():
dog.bark()
dog.bark()
在这种情况下,'modules' 解决此问题的方法优于 classes 吗?
对于模块,我必须为彼此密切相关的事物创建两个单独的 .py 文件,此外,当我在 agressivedog.py
中工作时,我必须始终记住明确使用来自parent (dog.py
).
使用 classes,我可以将两个 classes 放在一个 .py 文件中,我唯一的错误是我不打算实例化那些 classes。我错过了什么?
在你的情况下,没有区别。这里我们说的是代码的可扩展性。假设您有 50 类 个“狗”继承人。因此,你将有 50 个模块,这很糟糕,而且继承层次会很混乱。我在说什么?如果您了解您的结构将被限制为 2-3 个继承人,则使用模块,但为了良好的支持、可测试性和可扩展性,请使用 类.