gpt4 book ai didi

python - 在没有构造函数和继承的情况下实例化 Python 类

转载 作者:太空宇宙 更新时间:2023-11-04 09:16:59 25 4
gpt4 key购买 nike

在下面的代码中,OP 创建了一个继承模板类 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++ 中,构造函数被视为特殊的并且不被继承。

关于python - 在没有构造函数和继承的情况下实例化 Python 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com