python中方法和属性之间的区别

时间:2017-09-20 02:50:45

标签: python class oop methods attributes

我正在学习python并对类进行练习。它告诉我将nd属性添加到我的类中,并将方法添加到我的类中。在我阅读练习之前,我一直以为这些都是一样的。这两者有什么区别?

5 个答案:

答案 0 :(得分:3)

术语

心理模型:

  • 存储在实例或类中的变量称为attribute
  • 存储在实例或类中的函数称为method

根据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 variable

答案 1 :(得分:2)

方法是属性,但并非所有属性都是方法。例如,如果我们有类

class MyClass(object):

    class_name = 'My Class'

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

此类有两个属性class_namemy_method。但只有my_method是一种方法。方法是属于您的对象的函数。所有课程都有其他隐藏属性,但这正是您的练习可能会讨论的内容。

答案 2 :(得分:1)

快速,简单的说明。

属性==特征。 方法==操作/动作。

例如,让我们描述一只猫(喵!)。

猫的属性(特征)是什么? 它有不同的品种,名称,颜色,是否有斑点...等。

猫的方法(动作)是什么? 它可以喵叫,爬爬,刮擦,破坏笔记本电脑等。

请注意区别,属性定义猫的特征。

另一方面,方法定义动作/操作(动词)。

现在,请牢记上面的定义,让我们创建一个类别为'cat'... meowww

的对象
class Cat():

要创建属性,请使用def init (self,arg1,arg2)-(如下所示)。

'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”参数的实例的属性。通常,它们是相同的(例如,两者都繁殖,self.breed =繁殖)。在这里,它使用不同的编码以避免混淆。

并且属性通常写为'self.attribute_name'(如上所示)。

现在,方法更像是动作或操作,您可以在类的主体内定义一个函数来执行某些操作,例如杀死鼠标。一种方法也可以利用您在对象本身内定义的属性。

方法和属性之间的另一个关键区别是调用方式。

例如,假设我们使用上面定义的类创建实例。

my_cat = Cat()

要调用属性,请使用

my_cat.name

my_cat.breed

对于方法,您可以调用它来执行一些操作。在Python中,您调用带有打开和关闭括号的方法,如下所示:

my_cat.kill_mouse()

答案 3 :(得分:0)

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

示例:

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

此处hello是一种方法,name是一种属性。

答案 4 :(得分:-1)

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关联的方法:名字:reyan和姓氏:ishtiaq......。 与obj2关联的方法:名字:ishtiaq和姓氏:reyan......。 20 30