Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我有两个相同类的对象,我使用pyhton的setattr方法设置一个对象的值,那么另一个对象会发生什么情况_Python_Oop - Fatal编程技术网

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