经过研究个人总结如下,如有不对欢迎留言讨论:
1、类方法,用来管理类属性,类和实例都可以访问,调用返回值没有区别
2、实例方法,用来管理实例属性,实例访问
3、静态方法,用来作为类里面的工具箱,类和实例都可以访问
另外
1.类属性只有通过类名.属性名来修改,并且会影响所有的实例对象。而通过实例.类属性名修改,只影响实例的属性值,而类属性或其他子类对象值不变
2.实例属性,只能通过实例.属性名访问,不能用类名.属性名访问
3.实例方法可以通过类和实例.方法名访问,但是:
实例.方法名()调用时候,会自动传递实例对象作为self传入
类名.方法名 ()调用时候,需要手动传入实例对象,否则报错
# 创建一个带计数器功能的矩形类
class Rectangle():
__count_num=0#定义一个私有类属性用来计数,因为是类属性故类和每个实例对象中都会有这个属性
def __init__(self,height,width):
'''
初始化矩形类,有两个参数:
height:高度
width:宽度
两个参数均设置为私有,又由于其在实例方法中,故为私有实例属性
'''
self.__height=height
self.__width=width
self.__count=self.__count_result()#计数器也设置为私有对象属性
'''使用类方法实现计数,如果去掉这行,直接用实例.
方法名调用计数,会发现每调用一次方法就加一,而
不是每实例化一次加一,会导致错误'''
# 设置一个静态方法用于判断数字是否大于0,相当于类中工具箱中的一种工具,用于其他方法设置数值时进行判断
@staticmethod
def value_check(num):
if num>0:
return num
else:
raise ValueError('请输入一个大于零的数字')
# 对两个私有实例属性使用property进行设置
@property#使用property封装后,实现只可访问,不能修改
def count(self):
return self.__count
@property
def height(self):
return self.__height
@height.setter
def height(self,value):
self.__height=self.value_check(value)#使用静态方法value_check对数值进行验证判断
@property
def width(self):
return self.__width
@width.setter
def width(self,value):
self.__width=self.value_check(value)#使用静态方法value_check对数值进行验证判断
# 接下来实现计数功能,由于是对私有类属性进行变更,故使用类方法
@classmethod
def __count_result(cls):#此处设置为私有方法避免从实例访问,否则每访问一次就会导致加一
cls.__count_num+=1
return cls.__count_num
r1=Rectangle(10,20)
r2=Rectangle(20,30)
# r1.count=10 #如果不将count设置为私有,那么一旦这里重新赋值就会导致计数器错误
print(r1.count)
print(r1.count)
print(r1.count)
print(r2.count)
print(r2.count)