Python 如果我有两个相同类的对象,我使用pyhton的setattr方法设置一个对象的值,那么另一个对象会发生什么情况
我对类的理解是,对象应该具有相同的属性 所以我对我的第二个对象的行为感到困惑,这是我用来理解面向对象编程的代码Python 如果我有两个相同类的对象,我使用pyhton的setattr方法设置一个对象的值,那么另一个对象会发生什么情况,python,oop,Python,Oop,我对类的理解是,对象应该具有相同的属性 所以我对我的第二个对象的行为感到困惑,这是我用来理解面向对象编程的代码 class Emmploy: ecount = 0 def __init__(self,name,age): self.name = name self.age = age Emmploy.ecount = Emmploy.ecount+1 def disemploy(self):
class Emmploy:
ecount = 0
def __init__(self,name,age):
self.name = name
self.age = age
Emmploy.ecount = Emmploy.ecount+1
def disemploy(self):
print("name of employ:",self.name,"age of employ:",self.age)
def empcount():
print("total employs are:",Emmploy.ecount)
emp1 = Emmploy("zahid",35)
emp2 = Emmploy("hassan",34)
emp1.disemploy()
emp2.disemploy()
Emmploy.empcount()
val = str(hasattr(emp1,'salary'))
print(val)
val = str(setattr(emp1,'salary',3500))
print(val)
print(emp1.salary)
print(emp2.salary)`
两个不同的对象可以具有完全不同的值作为其属性,因为它们是两个不同的对象 所以 emp1的薪水是3500英镑,名字像乔 鉴于 emp2的薪水可以是4000英镑,名字像Doe
希望这能提供一些清晰性Python是一种动态语言,如PHP和JavaScript。类没有固定的属性,类中的每个对象只有显式分配给它的属性。它不像C++,在定义类时必须声明所有的类属性和方法。 公共属性通常在
\uuuu init\uuuu()
方法中指定,但您可以稍后在每个对象中添加和删除属性。您不需要使用setattr()
,您可以编写:
emp1.salary = 3500
setattr()
和getattr()
主要用于属性名位于变量中的情况
由于您从未将salary
属性分配给emp2
,因此在尝试访问emp2.salary
时会出现错误
尽管该语言允许这种灵活性,但您不必使用它。为了便于理解,最好将默认值指定给
\uuuuu init\uuuuu()中的所有属性
method.你怎么看?你的问题是什么?我想让他困惑的是emp2
根本没有salary
属性。在我的init方法中,我没有传递salary。你的对象应该遵循类中的参数,这使你的代码更加健壮,清晰易懂是的,你是对的@Barmar,我正在通过“setattr”方法设置属性工资是的!你是非常正确的,并且在根本原因上,我从C++切换到Python,学习Python。谢谢@Barmar