2024-09-27 21:34:52 发布
网友
比如在java或C中,我们可以创建一个
Account obj = new SavingsAccount();
其中Account是父类SavingsAccount是子类
Account
SavingsAccount
如何使用python做同样的事情
基本上我想做的就是这样 https://repl.it/@MushfiqurRahma1/Polymorphic-Object
Python是动态类型化的:名称指的是对象,不涉及任何类型概念。你只是
>>> class Account: pass ... >>> class SavingsAccount(Account): pass ... >>> obj = SavingsAccount()
每个对象存储对其自身类型的引用
>>> type(obj) <class '__main__.SavingsAccount'>
每个类型都有一个对其方法解析顺序(MRO)的引用
>>> type(obj).__mro__ (<class '__main__.SavingsAccount'>, <class '__main__.Account'>, <class 'object'>)
实例属性不是根据“定义”它们的类来“划分”的;每个属性只存在于实例本身上,不引用任何特定的类
方法只存在于类本身中;当调用obj.foo()时,MRO用于确定使用了谁的定义
obj.foo()
Python是一种松散类型的语言。这意味着您不必指定变量类型。你可以这样做:
class Account(): def deposit(): pass class SavingsAccount(Account): pass obj = SavingsAccount() obj.deposit(20)
编辑:正如chepner指出的:Python is strongly typed, but also dynamically typed: type is associated with an object, not the name referring to an object.
Python is strongly typed, but also dynamically typed: type is associated with an object, not the name referring to an object.
Python使用Duck类型,这意味着您不应该真正关心赋值左侧的类。只要实例化子类,您就应该能够使用它的父“接口”来执行动态方法调用之类的操作
Python是动态类型化的:名称指的是对象,不涉及任何类型概念。你只是
每个对象存储对其自身类型的引用
每个类型都有一个对其方法解析顺序(MRO)的引用
实例属性不是根据“定义”它们的类来“划分”的;每个属性只存在于实例本身上,不引用任何特定的类
方法只存在于类本身中;当调用
obj.foo()
时,MRO用于确定使用了谁的定义Python是一种松散类型的语言。这意味着您不必指定变量类型。你可以这样做:
编辑:正如chepner指出的:
Python is strongly typed, but also dynamically typed: type is associated with an object, not the name referring to an object.
Python使用Duck类型,这意味着您不应该真正关心赋值左侧的类。只要实例化子类,您就应该能够使用它的父“接口”来执行动态方法调用之类的操作
相关问题 更多 >
编程相关推荐