Python 类,实例,方法,属性
2017-02-22 本文已影响37人
geekMole
注:在runoob上学Python发现上面好多坑啊,有些描述根本就是一点不准确,在此总结一下
参考--Python的实例方法,类方法,静态方法之间的区别及调用关系
# 类定义
class People:
# 定义基本属性
# 类属性
classp = 888
name = 'people'
age = 0
# 定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
# 定义构造方法
# 定义在__init__()方法里的变量就是实例属性,这些属性只有被创建时才会被创建。
# 当类属性与实例属性同名时,一个实例访问这个属性时实例属性会覆盖类属性,但类访问时不会。
def __init__(self, n, a, w):
self.name = n
self.age = a
# 私有实例属性
self.__weight = w
self.height = 166
self.score = 12
# 私有实例方法
def __foo(self):
print('执行私有实例方法')
# 实例方法默认self为参数,self是实例
def speak(self):
self.number = 22856
print("%s 说: 我 %d 岁。" %(self.name,self.age))
self.__foo()
# 私有类方法
@classmethod
def __classfoo(cls):
print('执行私有类方法')
# 类方法默认类做参数
@classmethod
def classRun(cls):
print("gogogo")
cls.__classfoo()
# 静态方法
@staticmethod
def staticfunc():
print('staticFuc')
# 普通方法(会报没有参数的错误但是不影响执行)
def function():
print('normalFunction')
# 实例化类
p = People('runoob', 10, 30)
q = People('runhero', 11, 31)
# 实例调用实例方法
p.speak()
# 实例调用静态方法
p.staticfunc()
# 实例调用普通方法,无法调用
# p.function()#错误
# 类调用实例方法带实例参数
People.speak(q)
# 类调用静态方法
People.staticfunc()
# 类调用普通方法
People.function()
# 类调用类方法
People.classRun()
# 改变实例属性只影响相应实例
p.age = 80
# 改变类属性,影响类和对应实例(注意类属性和实例属性重名时,实例访问时实例属性覆盖类属性)
People.classp = 80
# 实例可访问类属性,类不可访问实例属性
# print(people.height)#错误
# 实例可以访问类属性classp
print(p.name,p.age,p.height,p.classp,p.score,p.number)
# 类访问类属性
print(People.name, People.age)
p.classp = 886
print(q.name, q.age, q.height, q.classp, q.score)