- 魔术方法
class Test:
# 魔术方法
def __init__(self, nickname, age):
print('-----魔术方法,只要创建了对象就会自动调该方法')
self.nickname = nickname
self.age = age
c=Test('花花',5)
运行结果:
-----魔术方法,只要创建了对象就会自动调该方法
- 普通方法
class Test:
#普通方法
def general_method(self):
print('-----普通方法')
print(self) #self为对象,self=t
t=Test() #创建一个对象t
print(t)
t.general_method()
运行结果:
<__main__.Test object at 0x000001CDBBBFF978>
-----普通方法
<__main__.Test object at 0x000001CDBBBFF978>
- 类方法
class Test:
# 类方法
@classmethod
def class_method(cls):
print('-----类方法,不用创建对象,直接可调用')
print(cls) # cls为类,cls=Cat
print(Test)
Test.class_method()
运行结果:
<class '__main__.Cat'>
-----类方法,不用创建对象,直接可调用
<class '__main__.Cat'>
- 静态方法:
class Test:
#静态方法
@staticmethod
def static_method():
print('-----静态方法,不用创建对象,直接可调用')
Test.static_method()
类方法的特点
1.定义需要依赖装饰器@classmethod
2.类方法中参数不是一个对象,还是类
3.类方法中只可以使用类属性,不能使用self.XXX属性
4.类方法中不可使用普通方法,可使用类方法和静态方法
类方法的功能:
可以实现在对象创建之前,完成一些动作
静态方法的特点(很类似类方法)
1.需要装饰器staticmethod
2.静态方法无需传递参数(cls,self),不依赖类和对象
3.只可以使用类属性,不能使用self.XXX属性
4.不可使用普通方法,可使用类方法和静态方法
- 各种方法以及属性之间的调用关系
class Cat:
age=2 #类属性
__name='peter' #私有变量,只能在内部访问
#魔术方法
def __init__(self,nickname,age):
print('-----魔术方法')
self.nickname=nickname
self.age=age
#普通方法
def eat(self,food):
print('-----普通方法')
print('可使用类属性,私有变量,以及self属性',Cat.age,Cat.__name,self.nickname)
print('可以使用类方法,静态方法')
Cat.class_method()
Cat.static_method()
print('{}喜欢吃{}'.format(self.nickname,food))
#类方法
@classmethod
def update_name(cls):
print('-----类方法')
print('可以使用类属性,私有变量,不可使用对象的属性',cls.age,cls.__name) #可访问类属性,私有变量
# print(self.nickname) #报错,不可使用对象的属性
print('可以使用类方法,静态方法,不可使用普通方法')
cls.class_method() #可使用类方法
cls.static_method()#可使用静态方法
# Cat.eat(self,'fish') #报错,类方法不可使用普通方法
cls.__name='招财猫'
print('小猫改名为{}了'.format(cls.__name))#类里面可修改私有变量
# 静态方法
@staticmethod
def update_age():
print('-----静态方法')
print('可以使用类属性,私有变量,不可使用对象的属性', Cat.age, Cat.__name) # 可访问类属性,私有变量
# print(self.nickname) #报错,不可使用对象的属性
print('可以使用类方法,静态方法,不可使用普通方法')
# Cat.eat(self,'fish') #报错,类方法不可使用普通方法
Cat.class_method() # 可使用类方法
Cat.static_method() # 可使用静态方法
Cat.age=2 # 可修改类变量
print('小猫今年{}岁了'.format(Cat.age))
@classmethod
def class_method(cls):
print('这是一个类方法')
@staticmethod
def static_method():
print('这是一个静态方法')
c=Cat('花花',5) #创建一个对象
c.eat('老鼠') #调普通方法
Cat.update_name() #调类方法
Cat.update_age() #调静态方法
# print(Cat.__name,c.__name) #无法访问私有变量,报错
运行结果:
-----魔术方法
-----普通方法
可使用类属性,私有变量,以及self属性 2 peter 花花
可以使用类方法,静态方法
这是一个类方法
这是一个静态方法
花花喜欢吃老鼠
-----类方法
可以使用类属性,私有变量,不可使用对象的属性 2 peter
可以使用类方法,静态方法,不可使用普通方法
这是一个类方法
这是一个静态方法
小猫改名为招财猫了
-----静态方法
可以使用类属性,私有变量,不可使用对象的属性 2 招财猫
可以使用类方法,静态方法,不可使用普通方法
这是一个类方法
这是一个静态方法
小猫今年2岁了
总结:
类方法 静态方法
不同点:
1.装饰器不同
2.类方法是有参数的,静态方法是没有参数的
3.类方法可以使用类名或cls调用访问,静态方法只能通过类名调用访问
相同:
1.只能访问类的属性和方法,对象的无法访问的
2.都可以通过类名调用访问
3.都可以在创建对象之前使用,不依赖于对象
普通方法 与 类方法,静态方法 的区别:
1.没有装饰器
2.普通方法永远依赖于对象,因为每个普通方法都有一个self.self即对象
3.只有创建了对象才可以调用普通方法