静态方法:
-
作用:静态方法可以更好的组织代码,防止代码变大后变得比较混乱。
-
特性: 静态方法只是名义上归类管理,实际上在静态方法里访问不了类或者实例中的任何属性
类方法:
-
作用:无需实例化直接被类调用
-
特性: 类方法只能访问类变量,不能访问实例变量
属性方法:
作用:属性方法把一个方法变成一个属性,隐藏了实现细节,调用时不必加括号直接d.eat即可调用self.eat()方法
静态方法:
1. __new__ : 先于__init__方法,每生成一个实例执行一次,创建实例对象 (在内存中给对象分配空间)
2. __init__: 每生成一个实例就会执行一次,初始化实例对象 (给对象的空间中, 保存数据)
3. __call__: 有这个方法, 对象就可以被调用
4. __del__: delete obj 就会调用这个方法
class A():
class_name = 'A'
def __init__(self, num):
self.num = num
@staticmethod # 静态方法
def func1():
# 方法要操作的数据, 不是这个类里的
print('func1')
pass
@classmethod # 类方法
def func2(cls):
# 类方法, 这个方法, 要操作的数据是类中保存的
print(cls.class_name)
pass
def func3(self):
# 实例方法, 这个方法, 要操作的数据, 是实例中的数据
print(self.num)
pass
A.func1()
A.func2()
a = A(123)
a.func3()
属性方法:
class A():
name = 'aaa'
birthday = '2010-01-01'
@property # 属性方法
def age(self):
return 10
a = A()
print(a.name)
print(a.age) # age函数被当做属性使用
魔法方法:
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __call__(self, *args, **kwargs):
print('被调用了')
def __add__(self, other):
return self.age + other.age
def __ge__(self, value):
return self.age >= value
def __del__(self):
print('被删除了')
class Dog():
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person('lisi', 18)
p2 = Person('zs', 19) # 就算你不主动删除, 在脚本执行完成时, 解释器也会把p2 删除
# d1 = Dog('xiaohua', 3)
# print(p1 + d1)
# print(d1 + p1)
# print(p1 >= 20)
# l1 = [1, 2, 3]
# l2 = [4, 5, 6]
# print(l1 + l2) # __add__()
# p1()
del p1
del p2