面向对象相关

Posted gracenana

tags:

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

面向对象的三大特征

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

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

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

类的成员 

 变量 : 

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 

 

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

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

JS代码预解析原理函数相关面向对象

面向对象相关

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

面向对象的相关理论

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