super 和继承作为对象单独传递有什么区别?
what is the difference between super and inheritance by passing it alone as an object?
在下面的示例中,我想知道什么时候应该使用其中之一进行继承?我认为两者都是有效的,为什么有时我必须使用 super 如果其他方法可行?
class User:
def __init__(self):
self._user = "User A"
pass
class UserA(User):
_user = "User B"
def __init__(self):
super().__init__()
class UserB(User):
pass
super() 内置 returns 一个代理对象(superclass 的临时对象),允许我们访问基 class 的方法。例如:
class Mammal(object):
def __init__(self, mammalName):
print(mammalName, 'is a warm-blooded animal.')
class Dog(Mammal):
def __init__(self):
print('Dog has four legs.')
super().__init__('Dog')
self 表示 class 的实例。通过使用“self”关键字,我们可以访问python
中class的属性和方法
你是对的,两者都有效。区别是:
- UserA:您正在覆盖祖先的
__init__
方法。如果您想在初始化过程中添加一些东西,这很实用。但是,您仍然想要初始化祖先,这可以通过 super().__init__()
完成,尽管已经覆盖了 __init__
方法。
- UserB:您正在完全使用您继承的祖先的
__init__
(通过不覆盖 __init__
方法)。如果在初始化期间不需要做任何额外的事情,可以使用它。
在下面的示例中,我想知道什么时候应该使用其中之一进行继承?我认为两者都是有效的,为什么有时我必须使用 super 如果其他方法可行?
class User:
def __init__(self):
self._user = "User A"
pass
class UserA(User):
_user = "User B"
def __init__(self):
super().__init__()
class UserB(User):
pass
super() 内置 returns 一个代理对象(superclass 的临时对象),允许我们访问基 class 的方法。例如:
class Mammal(object):
def __init__(self, mammalName):
print(mammalName, 'is a warm-blooded animal.')
class Dog(Mammal):
def __init__(self):
print('Dog has four legs.')
super().__init__('Dog')
self 表示 class 的实例。通过使用“self”关键字,我们可以访问python
中class的属性和方法你是对的,两者都有效。区别是:
- UserA:您正在覆盖祖先的
__init__
方法。如果您想在初始化过程中添加一些东西,这很实用。但是,您仍然想要初始化祖先,这可以通过super().__init__()
完成,尽管已经覆盖了__init__
方法。 - UserB:您正在完全使用您继承的祖先的
__init__
(通过不覆盖__init__
方法)。如果在初始化期间不需要做任何额外的事情,可以使用它。