十月长欢
在一个类A中普通的方法定义为def func(),在调用时通过对象a.func()
类方法通过@classmethod定义,只能访问类的属性,通过类来调用A.func()
如果希望像普通属性一样调用方法通过@property,调用时为a.func,不用加括号
慕移动3008453
python3要加括号
慕的地655547
钢蛋
方法上方标注@classmethod、@property或无标注,分别代表classmethod、property和一般的方法。
Gargantua
cls表示类本身,self表示一个具体实例本身。所以cls主要用在类方法定义,而self则是实例方法定义中。而get_hobby是classmethod,所以第一个参数传入了cls。
睡与争疯
把programer.get_weight()改成programer.get_weight试试
Uestc_L
classmethod装饰的方法只能通过类名进行调用,而类名调用只能调用类属性,你的_name属于对象属性,不能被classmethod修饰的方法调用
asia2158
和self一样理解就好了,或者你可以理解为“规定”
南区大表哥
很简单 因为最后一个函数没有返回值 楼主你的基础太差了 多看看基础吧
慕UI9683588
这句语法是没有问题的,你可以换个IDE试试,或者把你的报错贴出来~
JoshuaShang
一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。
xuanbg163
报错原因是因为,你第19行print打印括号是中文的,改成英文的就可以。
import os,sys
class programmer(object):
hobby="play computer"
def __init__(self,name,age,weight):
self.name=name
self._age=age
self.__weight=weight
@classmethod
def get_hobby(cls):
return cls.hobby
@property
def get_weight(self):
return self.__weight
def self_introduce(self):
print("My name is %s \nI am %s yeas old\n"%(self.name, self._age))
if __name__=='__main__':
prog=programmer('Albert',25,80)
print(dir(prog))
print(programmer.get_hobby())
print(prog.get_weight)
print(prog._programmer__weight,prog.self_introduce)
慕粉3914370
这两个名词不严格区分,一般地函数是有形参返回值的方法,方法是OO中的概念。