实例化没有构造函数和继承的Python类

时间:2011-11-12 17:21:56

标签: python inheritance

在下面的代码中,OP创建了一个继承Template类class BatchRename(Template):的类,并且在代码的底部,他将类实例化为t = BatchRename(fmt),尽管没有构造方法({{1 }})。由于我理解Python中的继承,这个代码可能有问题,但我是Python的新手,所以我可能会遗漏一些东西。谁能解释一下这个?

小代码解释: OP展示了如何在模板中使用自定义分隔符,他正在对示例中的某些文件进行批量重命名。他正在创建一个自定义类,它继承自Template以更改def __init__():名称(字段,属性,属性)并同时使用内部功能。

delimeter

我从http://docs.python.org/tutorial/stdlib2.html#templating

获取此代码

2 个答案:

答案 0 :(得分:3)

在每个Python类中都不需要__init__;它是可选的,只有在出现时才会被调用。新类型Python类的实际构造函数是__new__,它继承自object

>>> class Foo(object):
...  pass
...
>>> Foo()
<__main__.Foo object at 0x021757F0>
>>> Foo(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object.__new__() takes no parameters

如果一个类继承自提供__init__的类,则该函数将继承,就像任何其他方法一样。这与C ++不同,其中构造函数被视为特殊的并且不被继承。

答案 1 :(得分:2)

BatchRename根本不需要__init__,因为它是从超类Template继承的。例如:

class A:
    def __init__(self):
        self.age = 27

class B(A):
    pass # Does nothing

>>> A().age
27
>>> B().age # Calling __init__ from super class A
27