一、类方法、静态方法、实例方法对比
1、装饰器
类方法:加装饰器@classmethod是类方法;
静态方法:加装饰器@staticmethod是静态方法
实例方法:不需要加装饰器
2、传递参数
类方法有参数cls,至少有一个参数;这个参数是类对象,由系统自动传递。
静态方法没有参数。
实例方法有参数self,至少有一个参数;这个参数是实例对象,由系统自动传递。
3、调用
类方法可以通过类名直接调用,也可以通过对象来调用
静态方法可以通过类名直接调用,也可以通过对象来调用
实例方法只能通过实例对象去调用
相同点:都属于类,为所有对象共用。
二、类属性
1、写在__init__(self)
方法外面
2、类可以调用、实例对象也可以调用
class Cat:
#类属性
name="Jiafei"
age=2
likes=['鱼']
def __init__(self,name,color):
self.name=name
self.color=color
self.likes2=['鱼']
cat=Cat('小白','白色')
#调用类属性:
#类调用,直接得到类属性
#对象去调用,先得到对象属性,如果没有对象属性,去调用类属性
# print(Cat.age) 2
# print(cat.age) 2
print(Cat.name) #Jiafei
print(cat.name) #小白
#修改属性
# ='kob'
cat.name="小白2"
print(cat.name) #小白2
# Cat.age=3
cat.age=3 #给cat对象新增一个age对象属性
print(Cat.age) #2
3、类属性是共享的,同一个类创建的不同对象共享属性
4、类调用:直接调用类属性
class Cat:
#类属性
name="Jiafei"
age=2
likes=['鱼']
def __init__(self,name,color):
self.name=name
self.color=color
self.likes2=['鱼']
c1=Cat('加菲','黄色')
c2=Cat('汤姆','蓝色')
print(c1.likes) #['鱼']
print(c2.likes) #['鱼']
c1.likes.append('老鼠')
print(c1.likes) #['鱼', '老鼠']
print(c2.likes) #['鱼', '老鼠']
三、实例属性
1、写在__init__(self)
方法里面,或者写在实例方法中
2、实例属性只能通过对象去调用,不能通过类去调用
3、实例属性前面需要加self
4、对象调用:先得到对象属性,如果有对象属性则获取类属性
5、实例属性是不共享的
class Cat:
#类属性
name="Jiafei"
age=2
likes=['鱼']
def __init__(self,name,color):
self.name=name
self.color=color
self.likes2=['鱼']
c1=Cat('加菲','黄色')
c2=Cat('汤姆','蓝色')
print(c1.likes2) ['鱼']
print(c2.likes2) ['鱼']
c1.likes2.append('老鼠')
print(c1.likes2) ['鱼', '老鼠']
print(c2.likes2) ['鱼']