Python 在类内部或外部创建新属性
我有两个类(My_类和My_类2),它们的功能基本相同,但语法不同。我想知道哪种选择是最好的Python 在类内部或外部创建新属性,python,class,oop,object,attributes,Python,Class,Oop,Object,Attributes,我有两个类(My_类和My_类2),它们的功能基本相同,但语法不同。我想知道哪种选择是最好的 class My_class(): def __init__(self, int1, int2, str1, str2): self.int1 = int1 self.int2 = int2 self.str1 = str1 self.str2 = str2 self.sum = None self.
class My_class():
def __init__(self, int1, int2, str1, str2):
self.int1 = int1
self.int2 = int2
self.str1 = str1
self.str2 = str2
self.sum = None
self.fullname = None
def add_ints(self):
self.sum = self.int1 + self.int2
def concat_strings(self):
self.fullname = self.str1 + ' ' + self.str2
class My_class2():
def __init__(self, int1, int2, str1, str2):
self.int1 = int1
self.int2 = int2
self.str1 = str1
self.str2 = str2
def add_ints2(self):
return self.int1 + self.int2
def concat_strings2(self):
return self.str1 + ' ' + self.str2
obj1 = My_class(1, 2, 'Peter', 'Philips')
obj1.add_ints()
obj1.concat_strings()
print(obj1.sum, obj1.fullname)
obj2 = My_class2(10, 20, 'John', 'Norton')
obj2.sum = obj2.add_ints2()
obj2.fullname = obj2.concat_strings2()
print(obj2.sum, obj2.fullname)
在类My_类中,属性“sum”和“fullname”在构造函数中定义为None,然后在调用方法时获取它们的值。在My_class2中,属性不是在类中定义的,而是在代码中,使用方法的返回值当场创建属性
谢谢您第一个选项是最好的,因为您可以通过调用获取总和和全名,调用中输入了构建对象实例所需的其他信息。第一个选项是最好的,因为您可以通过调用中输入了其他信息来获取总和和全名构建对象实例所需的信息。实际上取决于您的用例,但我认为第一个选项更好。或者更好的方法:
class My_class():
def __init__(self, int1, int2, str1, str2):
self.int1 = int1
self.int2 = int2
self.str1 = str1
self.str2 = str2
self.sum = self.add_ints()
self.fullname = self.concat_strings()
def add_ints(self):
return self.int1 + self.int2
def concat_strings(self):
return self.str1 + ' ' + self.str2
这取决于您的用例,但我认为第一个选项更好。或者更好的方法:
class My_class():
def __init__(self, int1, int2, str1, str2):
self.int1 = int1
self.int2 = int2
self.str1 = str1
self.str2 = str2
self.sum = self.add_ints()
self.fullname = self.concat_strings()
def add_ints(self):
return self.int1 + self.int2
def concat_strings(self):
return self.str1 + ' ' + self.str2
可以说,方法一提供了更好的代码组织和可读性;两者都有其重要性 除此之外,对于
python>=3.6
而言,将类的所有属性声明到\uuuu init\uuuu
方法中允许类使用新的压缩dict
,该方法在所有实例中共享键(属性名称);这样可以节省类实例所需内存的20%
可以说,方法一提供了更好的代码组织和可读性;两者都有其重要性 除此之外,对于
python>=3.6
而言,将类的所有属性声明到\uuuu init\uuuu
方法中允许类使用新的压缩dict
,该方法在所有实例中共享键(属性名称);这样可以节省类实例所需内存的20%
我喜欢这个,以后不需要调用这些方法。像这样,以后不需要调用这些方法。谢谢