Python面向对象
Posted Yven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象相关的知识,希望对你有一定的参考价值。
一.绑定方法与非绑定方法
一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入
1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的
2.绑定给类的方法:为类中定义的函数加上一个装饰器@classmethod
二.非绑定方法:既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,普通函数没有自动传值的效果
案例如下:
class Foo: def f1(self): print(self) @classmethod def f2(cls): print(cls) @staticmethod def f3(a, b): print(‘f3‘, a * b)
import settings class Mysql: def __init__(self,ip,port): self.ip = ip self.port = port self.id = self.create_id() def tell_info(self): print(‘ip:%s port:%s id:%s‘%(self.ip,self.port,self.id)) @classmethod def from_conf(cls): return cls(settings.IP,settings.PORT) @staticmethod def create_id(): import uuid return uuid.uuid4() obj1 = Mysql.from_conf() obj2 = Mysql(‘10.1.183.16‘,8080) obj1.tell_info() obj2.tell_info()
二.isinstance与issubclass
isinstance(obj,cls)检查obj是否是类cls的对象
class Foo: pass obj = Foo() # 类型判断 print(isinstance(obj,Foo))
issubclass(sub,super)检查sub类是否是super类的子类
class Foo: pass class Bar(Foo): pass obj = Foo() # 判断是否子类 print(issubclass(Foo,Bar))
三.反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中的一切事物都是对象,用字符串取代点(.)对属性的操作
hasattr(o,name)判断某一个属性是是否存在
setattr(obj,name,value)给对象一个属性,属性名给name,值为value
getattr(o,name,default)获得对象name属性的值,不声明default时不存在该属性会报错
delattr(o,name)删除对象的name属性
class Person: def __init__(self,name,age): self.name = name self.age = age def run(self): print(‘%s run‘%self.name) obj = Person(‘Yven‘,18) delattr() print(hasattr(obj,‘name‘))#‘name‘ in obj.__dict__ print(getattr(obj,‘name‘,None))#obj.__dict__[‘name‘] setattr(obj,‘sex‘,‘male‘)#obj.__dict__[‘sex‘] = ‘male‘ print(obj.sex) delattr(obj,‘sex‘) print(obj.__dict__) setattr(obj,‘address‘,‘shanghaipudong‘) print(obj.address) print(hasattr(obj,‘address‘)) delattr(obj,‘address‘) print(hasattr(obj,‘address‘))
以上是关于Python面向对象的主要内容,如果未能解决你的问题,请参考以下文章