除了名称之外,这些类之间还有什么区别吗?
class WithClass ():
def __init__(self):
self.value = "Bob"
def my_func(self):
print(self.value)
class WithoutClass ():
value = "Bob"
def my_func(self):
print(self.value)
如果我使用或不使用__init__
方法来声明变量value
,有什么区别吗
我主要担心的是,我会以一种方式使用它,当这将导致我未来的进一步问题。
发布于 2009-10-08 11:29:15
在__init__
外部设置的变量属于该类。它们由所有实例共享。
在__init__
(和所有其他方法函数)中创建并以self.
为前缀的变量属于对象实例。
发布于 2017-09-07 01:51:35
class User(object):
email = 'none'
firstname = 'none'
lastname = 'none'
def __init__(self, email=None, firstname=None, lastname=None):
self.email = email
self.firstname = firstname
self.lastname = lastname
@classmethod
def print_var(cls, obj):
print ("obj.email obj.firstname obj.lastname")
print(obj.email, obj.firstname, obj.lastname)
print("cls.email cls.firstname cls.lastname")
print(cls.email, cls.firstname, cls.lastname)
u1 = User(email='abc@xyz', firstname='first', lastname='last')
User.print_var(u1)
在上面的代码中,User类有3个全局变量,每个变量的值都是'none‘。u1是通过实例化该类创建的对象。方法print_var打印User类的类变量和对象u1的对象变量的值。在下面显示的输出中,每个类变量User.email
、User.firstname
和User.lastname
的值都是'none'
,而对象变量u1.email
、u1.firstname
和u1.lastname
的值分别是'abc@xyz'
、'first'
和'last'
。
obj.email obj.firstname obj.lastname
('abc@xyz', 'first', 'last')
cls.email cls.firstname cls.lastname
('none', 'none', 'none')
发布于 2020-08-10 18:39:21
示例代码:
class inside:
def __init__(self):
self.l = []
def insert(self, element):
self.l.append(element)
class outside:
l = [] # static variable - the same for all instances
def insert(self, element):
self.l.append(element)
def main():
x = inside()
x.insert(8)
print(x.l) # [8]
y = inside()
print(y.l) # []
# ----------------------------
x = outside()
x.insert(8)
print(x.l) # [8]
y = outside()
print(y.l) # [8] # here is the difference
if __name__ == '__main__':
main()
https://stackoverflow.com/questions/1537202
复制相似问题