一、类方法与静态方法
class Person(object):
#构造方法
def __init__(self):
pass
#类方法
@classmethod
def fun1(cls): # cls 为当前类
pass
#静态方法
@staticmethod # 对参数没有要求
def fun2():
pass
'''
说明:
1.静态方法和类方与普通函数的使用相同,若在子类重写则优先调用重写后的方法
2.类方法与今天方法 既可以用对象调用也可以用类名调用,但是常用 类名调用
3.常用工具类的封装
'''
二、重写
'''
系统方法重写:
'''
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
#系统方法重写
def __str__(self):
'''
该方法必须有返回值,且返回值必须为字符串
'''
return "姓名:{},年龄:{}".format(self.name,self.age)
__repr__ = __str__
'''
关于__str__ 和 __repr__ 说明:
1.二者都未被重写,打印对象调用的是__str__
2.如果__str__重写,__repr__为被重写,打印对象调用的是__str__
3.二者都被重写,打印对象调用的是__str__
4.如果__str__ 未被重写,__repr__ 重写,打印对象调用的是__repr__
'''
'''
普通成员方法的重写
'''
class Animal(object):
#属性约束
__slots__ = ("name","age")
def __init__(self,name):
self.name = name
def show(self):
pass
class SubAnimal(Animal):
# 重写父类 show
def show(self):
print("子类~~~show")
#重写 父类的方法后则 优先调用重写后的方法, 属性的约束 仅对当前类有效,其他类无效
三、重载
'''
重载(overload) 与 重写(override) 区别:
重写仅局限与对象的继承,当父类成员函数 不能满足子类需求时候,子类将对父类的成员函数进行重构 即重写 父类成员函数
重载 包括重写 还有 全局函数的重构
'''
class Person(object):
def __init__(self,age):
self.age = age
# 重载 __add__ 为全局函数
def __add__(self,other):
return Person(self.age + other.age)
# 重写
def __str__(self):
return str(self.age)
__repr__ = __str__
四、对象信息
# 1.type
num = 1
num1 = 2
print(type(num))
print(type(num1) == type(num)) # 类型的比较
# 2.函数类型 的对象判断
def fun():
pass
import types
print(type(func) == types.FunctionType) # 是否为自定义def 函数
print(type(lambda x:x) == types.LambdaType) #是否为lambda 匿名函数
print(type(abs) == types.BuiltinFunctionType) # 是否为BIF内置函数
print(type((x for x in range(10))) == types.GeneratorType) # 是否为生成器
# 3.isinstance(testObj,obj)
print(isinstance(10,int))
print(isinstance([1,2,3],(list,tuple))) #等价于type([1,2,3]) in (list,tuple)
print(isinstance((1,2,3),(list,tuple)))
#4.dir() 获取一个对象的信息,返回一个列表
print(dir("hello"))
print(dir(int))
# 5.__name__ ,__dict__,__base__
'''
__name__: 通过类名访问,获取当前类的字符串
不能通过对象访问,对象这样操作:对象.__class__.__name__
__dict__:返回一个字典
通过类名访问,获取当前类的信息
通过对象访问,获取对象信息
__bases__:返回一个元祖
__base__ :拿到第一个父类
通过类名访问,查看当前类 所有父类
'''