实例方法
第一个蚕食
实例方法我们都知道, 就是绑在类实例上的, 这类方法的特点是第一个参数(self)是实例本身。
第一个参数可以隐式的传入实力本身
class C:
def __init__(self, name):
self.name = name
def getName(self):
return self.name
类方法
类和实例都可以调用
类方法与实例方法的区别就是第一个参数(cls)的区别。
第一个参数可以隐式的传入这个类(或者这个实例所属的类)。
这类方法要用@classmethod
装饰器去装饰。
class C:
def __init__(self, name):
self.name = name
def getName(self):
return self.name
@classmethod
def f(cls):
if cls is C:
print("通过类调用")
else:
print("通过实例调用")
C.f()
C().f()
静态方法
静态方法就类似java 中的静态方法
静态类它既不隐式传入类也不隐式传入实例, 它达到的目的极像java中的静态方法(不能动用实例的实例属性。)。
静态方法的特点就是他被@staticmethod
装饰器修饰
class People(object):
def __init__(self, name, age=None):
self.__name = name
self.age = age
def setAge(self, age):
if(age < 0):
print("error, age > 0")
else:
self.age =age
@staticmethod
def validate(age):
if(age < 0):
print("年龄不合理")
else:
print("合理")
动态增加方法
class Demo:
pass
t = Demo()
def test(a):
print(a)
t.test = test #给实例动态增加普通方法
import types
def test2(self):
print(self)
t.test2 = types.MethodType(test,t) #给实例绑定一个方法(增加一个实例方法)
[15页]
待做一个类的知识图。
-
类
-
成员变量
-
成员方法
- 实例方法
- 类方法
- 静态方法(它达到的目的极像java中的静态方法)
-
受保护程度:
- 私有成员
- 保护
- 公有
-