是的,我们可以为内置的 python 类型添加自定义方法和属性。例如,假设您想在列表类中定义一个新方法。
让我们考虑定义一个“列表”类并编写自己的函数,如下所示:
class list:
def custom_method (self):
return("Hey, I'm a custom method of list class")
#lets create an object here
obj = list([1,2,3])
print(obj.custom_method())
#The above runs fine, but a list has append() method also right?? let's try it
print(obj.append(1))
"""Now you will get Attribute error : list object has no attribute append()"""
因为,当您定义具有“列表”作为类名的类时,您将不再能够访问“内置列表”类方法,因为“列表”被视为用户定义的类而不是内置类。
所以,为了摆脱这个错误,你可以继承'list'类的属性/成员,你可以定义自己的方法或属性。因此,通过这种方式,您可以使用相同的类名调用用户定义/内置的类方法。
这是它的外观:
#Extending in-built list class
class list(list):
def custom_method (self):
return("Hey, I'm a custom method of list class")
obj = list([1,2,3])
print(obj.custom_method())
obj.append(1)
print(obj)
它运行良好,并将修改后的列表输出为 [1,2,3,1]。
注意:但是当您这样做时,从长远来看,它可能会产生一些歧义问题,例如命名冲突
例如,如果您有一个与用户定义类中的内置函数具有相同签名的方法(这里说“列表”),那么它将在您不知情或通知的情况下被覆盖,因此您可能无法使用其原始未来的功能。考虑到上面的代码,如果你曾经定义过类似的方法append(self, value)
,那么 append() 的原始功能就会丢失。
因此,最好为您的类名使用不同的类名,而不是与内置类名相同的名称
例如,您可以像下面这样声明一个类,它不会引发任何错误,或者您不会遇到任何命名冲突。
class custom_list(list):
def custom_method (self):
return("Hey, I'm a custom method of list class")
obj = custom_list([1,2,3])
print(obj.custom_method())
obj.append(1)
print(obj)