码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象4

时间:2019-10-21 09:45:45      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:xxxxx   col   pre   __init__   bar   count   delattr   xxx   方法   

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

  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

标签:xxxxx   col   pre   __init__   bar   count   delattr   xxx   方法   

原文地址:https://www.cnblogs.com/binyuanxiang/p/11711261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!