如何从父方法访问子类方法?
How to access a subclass method from parent method?
我正在尝试从它继承自的 class 中调用在子 class 中找到的方法。
class Account:
def __init__(self, full_name):
self.full_name = full_name
class Transactions(Account):
def __init__(self, full_name, amount=0):
super().__init__(full_name)
self._transactions = []
def add_transaction(self, amount):
if not isinstance(amount, int):
return ValueError('Please use an int.')
self._transactions.append(amount)
acc_0 = Account('Forest Whitaker')
我想使用 acc_0 的信息调用函数“add_transaction()”。不确定我是不是想多了,但我该怎么做呢?
旁注:如果有人熟悉 rbx.lua,在这种情况下我会尝试做这样的事情:acc_0.Transactions.add_transaction(50)
从您要实现的目标来看,继承层次结构是错误的。那应该是相反的。
class Transactions:
def __init__(self):
self._transactions = []
def add_transaction(self, amount):
if not isinstance(amount, int):
return ValueError('Please use an int.')
self._transactions.append(amount)
class Account(Transactions):
def __init__(self, full_name):
super().__init__()
self.full_name = full_name
acc_0 = Account('Forest Whitaker')
# now you can call
acc_0.add_transaction(10)
由于您正在实例化 Account
,因此您无法访问任何事务,因为 class 未实现该功能。您需要实例化子class Transactions
,例如:
acc_0 = Transactions('Forest Whitaker', 9)
你上面的代码实际上有几个问题,但是 subclassing 无论如何都不适合这个工作..它是一个 classic “是” vs “有a”面向对象的问题:交易有账户吗,实际上没有。交易是一种账户吗??不,也不对。但是,账户有交易吗?是的,它确实。因此,Transactions 的实例应该是 Account 的成员。所以:
class Account:
def __init__(self, full_name):
self.full_name = full_name
self.transactions = Transactions()
class Transactions:
def __init__(self):
super().__init__()
self._transactions = []
def add_transaction(self, amount):
if not isinstance(amount, int):
return ValueError('Please use an int.')
self._transactions.append(amount)
acc_0 = Account('Forest Whitaker')
acc_0.transactions.add_transaction(9)
我正在尝试从它继承自的 class 中调用在子 class 中找到的方法。
class Account:
def __init__(self, full_name):
self.full_name = full_name
class Transactions(Account):
def __init__(self, full_name, amount=0):
super().__init__(full_name)
self._transactions = []
def add_transaction(self, amount):
if not isinstance(amount, int):
return ValueError('Please use an int.')
self._transactions.append(amount)
acc_0 = Account('Forest Whitaker')
我想使用 acc_0 的信息调用函数“add_transaction()”。不确定我是不是想多了,但我该怎么做呢?
旁注:如果有人熟悉 rbx.lua,在这种情况下我会尝试做这样的事情:acc_0.Transactions.add_transaction(50)
从您要实现的目标来看,继承层次结构是错误的。那应该是相反的。
class Transactions:
def __init__(self):
self._transactions = []
def add_transaction(self, amount):
if not isinstance(amount, int):
return ValueError('Please use an int.')
self._transactions.append(amount)
class Account(Transactions):
def __init__(self, full_name):
super().__init__()
self.full_name = full_name
acc_0 = Account('Forest Whitaker')
# now you can call
acc_0.add_transaction(10)
由于您正在实例化 Account
,因此您无法访问任何事务,因为 class 未实现该功能。您需要实例化子class Transactions
,例如:
acc_0 = Transactions('Forest Whitaker', 9)
你上面的代码实际上有几个问题,但是 subclassing 无论如何都不适合这个工作..它是一个 classic “是” vs “有a”面向对象的问题:交易有账户吗,实际上没有。交易是一种账户吗??不,也不对。但是,账户有交易吗?是的,它确实。因此,Transactions 的实例应该是 Account 的成员。所以:
class Account:
def __init__(self, full_name):
self.full_name = full_name
self.transactions = Transactions()
class Transactions:
def __init__(self):
super().__init__()
self._transactions = []
def add_transaction(self, amount):
if not isinstance(amount, int):
return ValueError('Please use an int.')
self._transactions.append(amount)
acc_0 = Account('Forest Whitaker')
acc_0.transactions.add_transaction(9)