Python中的所有东西都是一个对象,几乎所有东西都有属性和方法。现在,根据面向对象编程,在Python中创建的每个对象都必须是公共父类的实例。但是,这种逻辑对我来说没有意义。
有人可以为我清楚吗?
答案 0 :(得分:4)
根据面向对象编程,在Python中创建的每个对象都必须是公共父类的实例
不正确。事实上,在Objective-C,Java(也可能是C#?)中,事物倾向于从单个超类派生,但这是一个实现细节 - 而不是OO设计的基础。
OO设计只需要一个足够通用的方法来查找您希望在要调用它的对象上调用的方法的实现。这通常是语言工作原理的基础(C ++,C#,Java,Objective-C,Python等都以他们自己的方式对他们的语言有意义)。
在C ++中,链接器对静态类型和向量表对动态类型(通过虚拟继承)进行此操作 - 不需要公共基类。
在Objective-C中,这是通过在对象的类结构中的哈希映射中查找某些内容,然后调用特定方法来获取所需方法的签名来完成的。这段代码细致入微,所以一切都来自一个共同的基类。
Python在技术上不应该要求这样做,但我认为他们已经做了一个实现选择来使一切都成为一个类,每个类都来自一个公共基类。
答案 1 :(得分:1)
在Python中,所有派生自类type
这就是为什么,在创建元类时,我们将type
class Meta(type):
def __new__(cls, name, bases, attrs):
<logic here>
class Foo(object):
__metaclass__ = Meta
此外:
type(object) -> type
type(type) -> type
DynamicClass = type('DynamicClass', (Foo,), {'a': 1, 'b':2})
dyn = DynamicClass()
type(dyn) -> Foo
等等
答案 2 :(得分:0)
那么,
li = [1, 2, 3, 4]
class A:
def __init__(self):
pass
a = A()
print isinstance(a, object)
print isinstance(li, object)
print isinstance(5, object)
>> True
>> True
>> True
答案 3 :(得分:0)
答案 4 :(得分:0)
Python中的公共父类是对象。事实上,虽然在某些版本中它不是强制性的,但您应该总是声明这样的类:
class MyClass(object):
...