为了账号安全,请及时绑定邮箱和手机立即绑定

最后一句话什么意思没弄明白

因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。

这个无论是

    类名.方法        --①

    实例.方法        --②

结果都一样,这里说的类方法无法获取任何实例变量,只能获得类的引用是什么意思?

是--①是正确的

然后--②是错的用法?

求解答不太明白


正在回答

4 回答

你可以这样理解,类方法和类属性是类拥有的东西,实例方法和实例属性是实例所拥有的东西,类会将自己的东西无私的共享给所有的实例,所以实例不仅可以调用自己的东西,而且还可以调用类拥有的东西。但是实例却很自私,自己的东西只能自己用,不对自己以外的任何人开放共享。例如:

#coding=utf-8
class Person(object):
    count = 0 # declare a class variable
    
    def __init__(self,name):
        self.name = name # declare a instance variable
        
    @classmethod
    def get_classFunction(cls): # define a class function
        return 'A class function'
        
    def get_instanceFunction(self): # define a instance function
        return 'A instance function'
        
p1 = Person('Jason')
print p1.count # 实例可以调用类的变量
print Person.count # 类可以调用类的变量
print p1.name # 实例可以调用实例的变量
print Person.name # 类无法调用实例的变量
print p1.get_instanceFunction # 实例可以调用实例的方法
print Person.get_instanceFunction # 类无法调用实例的方法
print p1.get_classFunction # 实例可以调用类的方法
print Person.get_classFunction # 类可以调用类的方法


13 回复 有任何疑惑可以回复我~
#1

kuo先生

原来如此
2020-08-24 回复 有任何疑惑可以回复我~

回复1楼,试了一下,可以在实例上调用类方法呀!!

class Person(object):

    __count = 0

    @classmethod

    def how_many(cls):

        return cls.__count

    def __init__(self, name):

        self.name = name

        Person.__count = Person.__count + 1


print Person.how_many()

p1 = Person('Bob')

print Person.how_many()


print p1.how_many()


输出:

0

1

1


0 回复 有任何疑惑可以回复我~

实例方法和类方法的定义不一样,定义实例方法需要加"self", 表明是调用实例,每个实例都可以调用此方法,而类方法定义后,只能用类名加方法名调用。 

0 回复 有任何疑惑可以回复我~
#1

北方的郎n_n

试了一下,可以在实例上调用类方法呀!!为啥呢
2019-09-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255779    人
  • 解答问题       2946    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

最后一句话什么意思没弄明白

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信