自己总结python类中类对象方法和类实例对象方法,其判断的方法是:
(1)首先看方法定义是否引用了self,带了self,肯定为实例对象方法。
(2)其次,看是否带参数,如果不带参数,肯定是类对象方法。
(3)除了以上两条外,至少带一个参数的方法定义,且没有classmethod标识的,肯定为实例对象方法(第一个参数实际上是类实例对象self,比较隐含),其他类对象方法。
关于类对象方法怎么使用,大家可以参考我写的类对象方法一篇博文:https://blog.csdn.net/weixin_42039090/article/details/80580012,。
请大家分析如下代码:
# -*- coding: utf-8 -*-
class Person(object):Count=0;
_income=0;
__Tel="13088888888"
def __init__(self,name,number):
self.name=name #实例对象可以引用的两个成员:name和number,且公有的。
self.number=number
def __scolia__(self): #这是实例对象方法,因为引用了self变量,当然,其他也可以哦。
print("scola")
return "scola"
def think(a):
#这里用a,可以代替self。不加特别说明,这里默认think方法是实例方法。
#判断根据是:要不没参数,要不加装饰器@classmethod,或者classmethod标识。
print("name:",a.__class__.__name__)
print("I am thinking")
def Work(): #类方法,不是实例对象方法。
print(Person.__Tel)
# print(Person.number) 类对象方法不能直接访问类实例对象的成员,即使是公有的,也不行。
Person.__Tel="13562334563"
print(" I am working!")
print(Person.__Tel)
def _Eat(): #保护类对象方法,也不是实例对象方法,在类继承中要注意。
print("I am Eating")
def __Sleep(): #私有类对象方法,不是类实例对象方法。
print('I am Sleeping')
#--------------类对象------------------------
print(Person.Count)
Person.Count+=1
print(Person.Count)
Person._income+=1000
print(Person._income)
#Person.__Tel #只能在类定义中引用,外部不能引用
Person.Work()
Person._Eat()
#Person.__Sleep() 只能在类定义中引用,外部不能引用
#---------------类实例化对象-------------------
a=Person()
Person.Count+=1 #类成员,实例一般不要轻易修改值。实例不改动类的属性值。a.Count没意义。
print(Person.Count)
a.think() #定义时必须带参数。
a.__scolia__() #定义时必须带参数。
#a.__Sleep()#更不能用。
大家,加油!