我正在学习python并对类进行练习。它告诉我将nd属性添加到我的类中,并将方法添加到我的类中。在我阅读练习之前,我一直以为这些都是一样的。这两者有什么区别?
答案 0 :(得分:3)
心理模型:
根据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_name
和my_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