【Python】面向对象基本语法2

目录

 

1.单继承

2.多继承

3.方法重写

4.类属性与方法

4.1类的私有属性

4.2类的方法

4.3类的私有方法

4.4类的专有方法


1.单继承

Python同样支持类的继承。派生类的定义如下:

class Student(Person):
    <statement-1>
    .
    .
    . 
    <statement-N>

需要注意圆括号中基类的顺序,若是基类中有相同的方法名。而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找基类中是否包含方法。

Person必须与派生类定义在一个作用域内。

# 类定义
class people:
    # 定义基本属性
    name = ""
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    # 定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s说:我%d岁。" %(self.name,self.age))

# 单继承示例
class student(people):
    grade = ""
    def __init__(self,n,a,w,g):
        # 调用父类的构造函数
        people.__init__(self,n,a,w)
        self.grade = g
    # 覆写父类的方法
    def speak(self):
        print("%s说:我%d岁了,我在读%d年级" %(self.name,self.age,self.grade))

s = student("ken",10,60,3)
s.speak()

2.多继承

Python同样有限的支持多继承形式。多继承的类定义如下:

class Student(Person1,Person2,Person3):
    <statement-1>
    .
    .
    . 
    <statement-N>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左至右查找父类中是否包含方法。

# 类定义
class people:
    # 定义基本属性
    name = ""
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    # 定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s说:我%d岁。" %(self.name,self.age))

# 单继承示例
class student(people):
    grade = ""
    def __init__(self,n,a,w,g):
        # 调用父类的构造函数
        people.__init__(self,n,a,w)
        self.grade = g
    # 覆写父类的方法
    def speak(self):
        print("%s说:我%d岁了,我在读%d年级" %(self.name,self.age,self.grade))

# 另一个类
class speaker():
    topic = ""
    name = ""
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫%s,我是一个演说家,我演讲的主题是%s" %(self.name,self.topic))

# 多重继承
class sample(speaker,student):
    a = ""
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)

test = sample("Tim",25,80,4,"Python")
test.speak()  # 方法名同,默认调用的是在括号中排前的父类的方法

3.方法重写

可以在子类重写父类的方法

# 定义父类
class Parent:
    def myMethod(self):
        print("调用父类方法")

# 定义子类
class Child(Parent):
    def myMethod(self):
        print("调用子类方法")

# 子类实例
c = Child()

# 子类调用重写方法
c.myMethod()

# 用子类对象调用父类已被覆盖的方法
super(Child,c).myMethod()

4.类属性与方法

4.1类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs。

class Parent:
    __age = 0  # 私有变量
    num = 0  # 公开变量
    def myMethod(self):
        self.__age += 1
        self.num += 1
        print(self.__age)

parent = Parent()
parent.myMethod()
parent.myMethod()
print(parent.num)
print(parent.__age)

4.2类的方法

在类的内部,使用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,self代表的是类的实例,也可以使用this

4.3类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部使用,不能在类的外部调用。self.__private_method

class Parent:
    def __init__(self,name,age):
        self.name = name
        self.__age = age
    def who(self):
        print("name: ",self.name)
        print("age: ",self.__age)
    def __foo(self):
        print("这是私有方法")
    def foo(self):
        print("这是公共方法")

parent = Parent("Tom", 20)
parent.who()
parent.foo()
parent.__foo()

4.4类的专有方法

  • __init__:构造函数,在生成对象时调用
  • __del__:析构函数,释放对象时使用
  • __repr__:打印,转换
  • __setitem__:按照索引赋值
  • __getitem__:按照索引获取值
  • __len__:获得长度
  • __cmp__:比较运算
  • __call__:函数调用
  • __add__:加运算
  • __sub__:减运算
  • __mul__:乘运算
  • __truediv__:除运算
  • __mod__:求余运算
  • __pow__:乘方

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gx1500291

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值