在下面的代码中,OP创建了一个继承Template类class BatchRename(Template):
的类,并且在代码的底部,他将类实例化为t = BatchRename(fmt)
,尽管没有构造方法({{1 }})。由于我理解Python中的继承,这个代码可能有问题,但我是Python的新手,所以我可能会遗漏一些东西。谁能解释一下这个?
小代码解释: OP展示了如何在模板中使用自定义分隔符,他正在对示例中的某些文件进行批量重命名。他正在创建一个自定义类,它继承自Template以更改def __init__():
名称(字段,属性,属性)并同时使用内部功能。
delimeter
获取此代码
答案 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