Python面向对象(三)
2021-07-18 10:08
标签:存在 value splay return name bar run assm turn 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 二.非绑定方法:既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,普通函数没有自动传值的效果 案例如下: isinstance(obj,cls)检查obj是否是类cls的对象 issubclass(sub,super)检查sub类是否是super类的子类 python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中的一切事物都是对象,用字符串取代点(.)对属性的操作 hasattr(o,name)判断某一个属性是是否存在 setattr(obj,name,value)给对象一个属性,属性名给name,值为value getattr(o,name,default)获得对象name属性的值,不声明default时不存在该属性会报错 delattr(o,name)删除对象的name属性 Python面向对象(三) 标签:存在 value splay return name bar run assm turn 原文地址:https://www.cnblogs.com/louyefeng/p/9526240.html一.绑定方法与非绑定方法
1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的
2.绑定给类的方法:为类中定义的函数加上一个装饰器@classmethodclass 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
class Foo:
pass
obj = Foo()
# 类型判断
print(isinstance(obj,Foo))
class Foo:
pass
class Bar(Foo):
pass
obj = Foo()
# 判断是否子类
print(issubclass(Foo,Bar))
三.反射
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‘))
上一篇:c# 文件与流