面向对象4

Posted binyuanxiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象4相关的知识,希望对你有一定的参考价值。

一、绑定方法和非绑定方法

  1. 对象的绑定方法

    1. 定义

        在类中没有被任何装饰器修饰的方法,专门为对象定制

      2. 调用方式

      • 对象调用时,将自己作为第一个参数传入

      • 类调用时,第一个参数手动传值

 

  2. 类的绑定方法

 

    1. 定义

        类中使用@classmethod修饰的方法,专门为类定制

      2. 调用方式

      • 对象调用时,默认第一个参数是这个对象的类

      • 类调用时,将自己作为第一个参数传入

 

  3. 非绑定方法

 

    1. 定义

        类中使用@staticmethod修饰的方法,和普通函数一样,不会自动传值。

      2. 调用方式

        ‘.‘ + 函数名调用

 

二、isinstance和type

  1. 区别

    type() 不会认为子类是一种父类类型,isinstance() 会认为子类是一种父类类型

  2. 代码

class Foo(object):
    pass


class Bar(Foo):
    pass


print(type(Foo()) == Foo)
print(type(Bar()) == Foo)
print(isinstance(Bar(),Foo))


输出
True
False
True

 

三、issubclass

  1. 作用

    判断一个类是否是另一个类的子类

  2. 代码

class Parent:
  pass
    
    
class Sub(Parent):
  pass
    
    
print(issubclass(Sub, Parent))
print(issubclass(Parent, object))
    
    
输出
True
True

 

四、反射

  1. 定义

    通过字符串操作类或对象的属性,本质就是使用内置函数

  2. 反射的四个内置函数

    • hasattr:判断一个方法是否存在于这个类中

    • getattr:根据字符串获取对象里对应方法的内存地址,加括号即可调用

    • setattr:将外部的一个函数绑定到实例中

    • delattr:删除一个实例或类中的方法

  3. 使用方法

class People:
    country = China

    def __init__(self, name):
        self.name = name

    def eat(self):
        print(%s is eating % self.name)


peo1 = People(byx)

print(hasattr(peo1, eat))

print(getattr(peo1, eat))
print(getattr(peo1, xxxxx, None))

setattr(peo1, age, 18)
print(peo1.age)
print(peo1.__dict__)

delattr(peo1, name)  # del peo1.name
print(peo1.__dict__)


输出
True
<bound method People.eat of <__main__.People object at 0x00000299755652E8>>
None
18
{name: byx, age: 18}
{age: 18}

 

以上是关于面向对象4的主要内容,如果未能解决你的问题,请参考以下文章

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

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

PHP面向对象之选择工厂和更新工厂

web代码片段

Java中面向对象的三大特性之封装

Scala的面向对象与函数编程