python中方法和属性的区别

am46iovg  于 2022-12-25  发布在  Python
关注(0)|答案(5)|浏览(139)

我正在学习python,做一个关于类的练习,它告诉我要给我的类加一个属性,给我的类加一个方法,我一直以为这是一回事,直到我看了练习,这两者有什么区别呢?

t3psigkw

t3psigkw1#

术语

心智模型:

  • 存储在示例或类中的 * 变量 * 称为 * 属性 *。
  • 存储在示例或类中的 * 函数 * 称为 * 方法 *。

根据Python的词汇表:

    • 属性**:与对象相关联的值,该对象使用带点的表达式按名称引用。例如,如果对象 * o * 具有属性 * a *,则将引用为 * o. a *
    • 方法:**在类体内部定义的函数。如果作为该类示例的属性调用,该方法将获得示例对象作为其第一个参数(通常称为self)。请参阅函数和嵌套作用域。

示例

适用于实际代码的术语:

a = 10                          # variable

def f(b):                       # function  
    return b ** 2

class C:

    c = 20                      # class attribute

    def __init__(self, d):      # "dunder" method
        self.d = d              # instance attribute

    def show(self):             # method
        print(self.c, self.d) 

e = C(30)
e.g = 40                        # another instance attribute
tag5nh1u

tag5nh1u2#

一个方法是一个属性,但不是所有的属性都是方法。例如,如果我们有一个类

class MyClass(object):

    class_name = 'My Class'

    def my_method(self):
        print('Hello World!')

这个类有两个属性,class_namemy_method,但是只有my_method是一个方法,方法是属于你的对象的函数,所有的类都有额外的隐藏属性,但是这就是你的练习要讨论的。

yr9zkbsy

yr9zkbsy3#

简单明了的解释。
属性==特征。方法==操作/行动。
例如,让我们描述一只猫(喵!).
猫的属性(特征)是什么?它有不同的品种,名字,颜色,是否有斑点......等等。
猫的行为方式是什么?它会喵喵叫,会爬,会抓你,会破坏你的笔记本电脑等等。
请注意区别,属性定义猫的特征。
另一方面,方法定义动作/操作(动词)。
现在,记住上面的定义,让我们创建一个类'cat'的对象...

class Cat():

要创建属性,请使用definit(self,arg 1,arg 2)-(如下所示)。
“self”关键字是对类的特定示例的引用。

def __init__(self, mybreed, name):
    
    # Attributes
    self.breed = mybreed
    self.name = name

# Operations/actions --> methods
def kill_mouse(self):
    print('Insert some method to kill mouse here')

注意(上图)'mybreed'是用户需要指定的输入参数,而self.breed是分配给'mybreed'参数的示例的属性。通常,它们是相同的(例如,两者都是breed,self.breed = breed)。在这里,为了避免混淆,它们的编码不同。
而属性通常写为'self.attribute_name'(如上所示)。
现在,方法更像是动作或操作,在类体中定义一个函数来执行某个操作,例如杀死一只鼠标,方法也可以利用对象本身定义的属性。
方法和属性之间的另一个关键区别是如何调用它。
例如,假设我们使用上面定义的类创建一个示例。

my_cat = Cat()

若要调用属性,请使用

my_cat.name

my_cat.breed

对于方法来说,调用它是为了执行某个动作,在Python中,调用方法时要带一个左右括号,如下所示:

my_cat.kill_mouse()
4si2a6ki

4si2a6ki4#

方法是在类中定义的函数。属性是在类中定义的示例变量。
示例:

class Example(object):
    def __init__(self, name):
        self.name = name
    def hello(self):
        print 'Hi, I am ' + self.name

这里hello是一个方法,name是一个属性。

hwamh0ep

hwamh0ep5#

class example:
    global a
    # a=0

    def __init__(self,x,y):
        self.fname=x
        self.lname=y
    def show(self):
        return "first name: {} & Last name: {}".format(self.fname,self.lname)

obj1=example('reyan','ishtiaq')
obj2=example('ishtiaq','reyan')

print('method associated with obj1: '+ obj1.show())
print('method associated with obj2: '+ obj2.show())

obj1.a=20
obj2.a=30

print(obj1.a)
print(obj2.a)

输出:与obj1关联的方法:名字:用户名:ishtiaq.............与obj2相关的方法:名字:用户名:瑞恩20 30

相关问题