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面向对象的主要内容,如果未能解决你的问题,请参考以下文章

python之路之前没搞明白4面向对象(封装)

Python面向对象学习之八,装饰器

python:第二部分:面向对象:面向对象object orinted

Python 面向对象

面向面试编程代码片段之GC

面向对象编程其实很简单——Python 面向对象(初级篇)