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

面向对象相关

时间:2019-01-02 19:27:09      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:加载   pass   rom   组合   type   add   types   父类   属性   

面向对象的三大特征

封装 : 把固定功能的代码封装到一个代码块,函数,对象,打包成模块

继承 : 子类可以自动拥有父类中除了私有属性外的其他所有内容

多态 : 同一个对象,多种形态

类的成员 

 变量 : 

1.实例变量(字段) : 给对象用的

2.类变量(静态变量) : 多个对象共享的.最好是用类名来访问

方法 :

1.成员方法(实例方法) : 对象直接访问的方法叫成员方法

2.静态方法 : 不需要给方法传递self

@staticmethod
def func():
    pass

3.类方法 : 类方法被调用时也不需要传递实例对象

@classmethod
def func1(cls, a, b):
    pass

属性:

class Person:
    def __init__(self, name, gender, birth):
        self.name = name
        self.gender = gender
        self.birth = birth  # 2000  2018
    # 年龄 -> 应该是算出来的. 而不是直接存储
    @property # 把一个方法更改成一个属性, 每次拿属性的时候都会自动的去执行这个方法
                   # 方法的返回值就是属性值
    def age(self):  # 实例方法
        print("我是方法")
        return 2018 - self.birth

1. 方法参数只能有一个self

2. 方法上方要写@property

3. 调用的时候,不需要写括号.直接当成属性变量来用就可以了

私有:

使用__作为前缀,那么这个方法或者变量就是一个私有的

私有变量 : self.__age = age  

私有方法 : def __age(self):  pass

类与类之间的关系:

1. 依赖关系

2. 关联关系

3. 组合关系

4. 聚合关系

5. 继承关系 : self就是你访问方法的那个对象,先找自己,再找父类

6. 实现关系

类中的特殊成员

1. 类名()会自动执行__init__()

2. 对象()会自动执行__call__()

3. 对象[key]会自动执行__getitem__()

4. 对象[key] = value 会自动执行__setitem__()

5. del 对象[key]会自动执行__delitem__()

6. 对象+对象会自动执行__add__()

7. with对象as变量会自动执行__enter__和__exit__

8. 打印对象的时候会自动执行__str__

9. 去掉hash __hash__ == None 对象就不可哈希了

 

创建对象的步骤 :  加载类 → 开辟内存(__new__) → 初始化(__init__) → 使用对象调用方法

 

isinstance, type, issubclass函数

issubclass(Bar, Foo) 这个内置函数判断xx类是否是xxx类型的子类

type(obj) 查看obj是由哪个类创建的

isinstance(Foo(), Foo) 判断xxx是xx类型的数据,没有type精准,只能往上判断,是否是XX家族体系中的

 

函数和方法

1. 类方法.不论任何情况,都是方法

2. 静态方法,不论任何情况.都是函数

3. 实例方法,如果是实例访问.就是方法.如果是类名访问就是函数

types模块

from types import MethodType, FunctionType
def func():
    pass
print(isinstance(func, FunctionType))  # True
print(isinstance(func, MethodType))    # False 

 

面向对象相关

标签:加载   pass   rom   组合   type   add   types   父类   属性   

原文地址:https://www.cnblogs.com/gracenana/p/10209763.html

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