Skip to content

类对象

面向对象3大特征:1. 封装 2. 继承 3. 多态(重载、重写)

python
class Person:
    def __init__(self, name, age):
        self.name = name 
        self.age = age
        
    def say(self):
        print('Person.name',self.name)    

class Student(Person[,...]):
    def __init__(self, name, age, score):
        self.score = score                    # 父类中没有属性,子类添加属性
        Person.__init__(self, name, age)      # 调用父类构造函数

    def say(self):
        print('Person.name',self.name) 
        
   def main(self):
         super().say()                 # 调用父类方法。子类和父类存在相同方法

issubclass(Student('Tom', 18, 100), Person)  # 检测继承关系
Student.mro()   # 返回类的继承顺序

实例化

python是一种面向对象语言,类对象是python中面向对象编程的基础。

思维方式描述
面向对象类和对象:类是模具,对象是饼干

设计者思维:
宏观:面向对象整体设计
微观:执行和处理数据

使用:
class 类名(父类):
面向过程执行者思维:步骤顺序执行
python
class Person:
    pass  # 空语句
    
class Person:
    def __init__(self, name, age):    # 构造函数  名称固定__init__,第一个参数是self,表示实例本身; 定义有参构造函数,需要预留无参构造函数
        self.name = name              # 实例属性
        self.age = age
        print('Person.__init__')
    
    def say(self):                    # 实例方法
        print('Person.name',self.name)

s1 = Person('张三', 18)               # s1是实例对象,自动调用__init__方法
s1.say()

type(s1)   # 对象类型
isinstance(s1, Person)  # 判断对象类型

属性和方法

每个类的实例对象都有自己的属性和方法,属性和方法的访问权限不同。

属性方法
实例属性:
self.实例属性 = 初始值
obj = 类名()
obj.实例属性 = 初始值
实例方法:
def 方法(self[,参数列表]):方法体
对象实例.方法()
类属性:
类名.类属性 = 初始值
类方法:
@classmethod
def 类方法(cls[,参数列表]):方法体
类名.类方法()
属性私有属性公共属性
定义__ 2个_开头其他
权限类内部可以访问,类外部不可访问
类外部可以通过__ 类名 __ 私有属性名
self.属性名
python
class Person:
    name = '张三'  # 类属性
    __age = 18    # 私有类属性
    
    @classmethod
    def say(cls):                    # 类方法
        print('Person.name',cls.name)
    
    def __init__(self, name, age):    # 构造函数  名称固定__init__,第一个参数是self,表示实例本身; 定义有参构造函数,需要预留无参构造函数
        self.name = name              # 实例属性

    def say(self):                    # 实例方法
        print('Person.name',self.name)
        Person.name = '李四'           # 类属性修改
        Person.__age                  # 私有类属性访问 类内部访问
        Person.__work()               # 私有方法访问   类内部访问
    def __work(self):
        pass

obj = Person()
obj.say() 

# 正确示例
obj._Person__age  # 私有类属性访问

# 错误示例
Person.__age    # 私有类属性访问  类外部访问异常
Person.__work() # 私有方法访问    类外部访问异常

内置方法

类定义一些专用方法,这些方法丰富程序的功能,可用于不同的场景。

方法名 __ (方法名) __描述
init(self,...)构造函数
del(self)释放函数,在对象被删除之前调用
new(cls,...)实例的生成操作
str(self)在使用print函数时,自动调用
getitem(self,key)获取对象属性值
len(self)获取对象长度
cmp(self,other)比较两个对象
getattr(self,name)获取对象属性值
setattr(self,name,value)设置对象属性值
delattr(self,name)删除对象属性值
gt(self,other)大于比较
lt(self,other)小于比较
ge(self,other)大于等于比较
le(self,other)小于等于比较
eq(self,other)等于比较
call(self,...)把实例对象作为函数调用 obj = Person() obj()

运算符重载

python中支持运算符重载,通过定义运算符方法,实现自定义运算符。

运算符方法 __ (方法名) __描述
+add(self,other)加法运算
-sub(self,other)减法运算
<,<=,==,!=,>=,>lt,le,eq,ne,ge,gt比较运算
<<,>>lshift,rshift位运算
,/,%,//,*mul,truediv,mod,floordiv,pow乘法运算
&&,|,^and,or,xor位运算
python
class Person:
    def __add__(self, other):  # p1+p2  self=p1,other=p2
        return self.age + other.age
p1 = Person()
p2 = Person()
p1+p2

上次更新于: