繁体   English   中英

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

[英]Instantiating a Python Class without Construction Function and Inheritance

在下面的代码中,OP创建了一个继承了Template类的class BatchRename(Template):在代码的底部,他将类实例化为t = BatchRename(fmt)尽管没有构造方法( def __init__(): 据我了解Python中的继承,这段代码可能存在问题,但是我是Python的新手,所以我可能会遗漏一些东西。 有人可以向我解释一下吗?

几乎没有代码解释: OP显示了如何在模板中使用自定义定界符,并且他正在示例中对某些文件进行批量重命名。 他正在创建一个自定义类,该类从Template继承,以更改delimeter名称(字段,属性,属性)并同时使用内部功能。

>>> import time, os.path
>>> photofiles = ['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg']
>>> class BatchRename(Template):
...     delimiter = '%'
>>> fmt = raw_input('Enter rename style (%d-date %n-seqnum %f-format):  ')
Enter rename style (%d-date %n-seqnum %f-format):  Ashley_%n%f

>>> t = BatchRename(fmt)
>>> date = time.strftime('%d%b%y')
>>> for i, filename in enumerate(photofiles):
...     base, ext = os.path.splitext(filename)
...     newname = t.substitute(d=date, n=i, f=ext)
...     print '{0} --> {1}'.format(filename, newname)

img_1074.jpg --> Ashley_0.jpg
img_1076.jpg --> Ashley_1.jpg
img_1077.jpg --> Ashley_2.jpg

我从以下代码中获取了此代码: http : //docs.python.org/tutorial/stdlib2.html#templating

您不需要在每个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 ++不同,在C ++中,构造函数被视为特殊的并且不被继承。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM