【发布时间】:2020-04-27 13:57:27
【问题描述】:
class Animal():
def add(self):
self.weight = 10
self.color = 'Black'
class Bird(Animal):
def add(self):
self.feather_type = 'Long'
super().add()
b = Bird()
b.add()
print(b.weight)
print(b.color)
print(b.feather_type) // will this be faster than above 2 statements ?
从父类访问变量,从子类的对象,比直接从子类访问变量慢吗?
如果父类中有很多变量 10+(包括数组和数据模型对象),并且每个变量都在子类中使用,是否建议在每个子类中添加这些变量并从父类中删除更好的性能? (当我写这篇文章时听起来很愚蠢,因为这与整个继承概念相矛盾)
将它们作为局部变量存储在子类函数中,然后访问它们会更好吗? (以防多次使用)
在代码中,变量没有在__init__ 方法中初始化。在这种情况下,这会使程序变慢吗?
这样做是因为,并非所有操作都需要类的所有属性。因此,何时并根据需要对它们进行初始化和使用。
(注意:注意在执行操作之前创建所需的属性)。
如果父类中有很多变量 10+(包括数组和数据模型对象),并且每个变量都在子类中使用,是否建议在每个子类中添加这些变量并从父类中删除更好的性能? (当我写这篇文章时听起来很愚蠢,因为这与整个继承概念相矛盾)
【问题讨论】:
-
它不应该对访问值产生有意义的影响。唯一的区别在于初始化。
-
当您可以通过基准测试证明差异很重要时,请担心它。 (你永远不会这样做。)在那之前,写出最易读、逻辑上你想要的和最容易维护的东西。
-
顺便说一句,
Dog.__init__什么都不做,可以省略。 -
@ezvine--如果两个
addfunctions 是实例方法,那么它们需要 self 作为参数。 -
@deceze 删除了
Dog类本身,这两个类足以传达问题。实际上它不是__init__,而是一个单独的函数,变量被初始化,正如我在问题中提到的那样。
标签: python python-3.x class oop inheritance