[英]Call class as function without staticmethod and classmethod and instantiating
[英]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.