Python 面向对象

1. 类

是用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。

1.1 类的定义

class ClassName:
	......

1.2 类对象

类对象是类的实例。类对象支持两种操作:属性引用和实例化。
属性引用:类名.属性名

示例:

class MyCLass:
    i = 0;

    # 自定义方法
    def f(self):
        return "f()"

x = MyCLass(10)

print(x.i)
print(x.f())

1.3 构造方法

类有一个名为__init__()的特殊方法(构造方法),该方法在类实例化时会自动调用。

示例:

class MyCLass:
    i = 0;

    # 构造方法
    def __init__(self, i):
        print("构造方法")
        self.i = i

    # 自定义方法
    def f(self):
        return "f()"

x = MyCLass(10)

print(x.i)
print(x.f())

输出:

构造方法
10
f()

self——self 代表类的实例,而非类

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是self。示例:

class Test():
    def g(self):
        print(self)
        print(self.__class__)

t = Test()
t.g()

输出:

<__main__.Test object at 0x7f31ac389e20>
<class '__main__.Test'>

从结果可以看出,self代表的是类的实例,代表当前对象的地址,而self.class则指向类。

self不是 python 关键字,我们把他换成任何一个变量也是可以正常执行的,如下:

class Test():
    # self不是python关键字,把它换成任何一个变量也可以正常执行
    def h(para):
        print(para)
        print(para.__class__)

t = Test()
t.h()

输出:

<__main__.Test object at 0x7f31ac389e20>
<class '__main__.Test'>

1.4 类的属性与方法

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

class People:
    # 基本(公有)属性
    name = ''
    age = 0

    # 私有属性,类外部无法访问私有属性
    __weight = 0

    # 构造方法
    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w

    # 类方法
    def introduce(self):
        print("我叫%s,今年%d岁。" %(self.name, self.age))

# 创建类实例
people = People("zhou", 24, 75)
# 调用类方法
people.introduce()

类的私有属性与方法

类的私有属性和方法:以两个下划线 __ 开头,则声明该属性或方法为私有,只能在类的内部使用,如:__private_arrtibute

:关于 Python 中下划线的使用可参考 Python 中下划线的含义

示例:

"""
类的私有属性和方法:
    以两个下划线开头,则声明该属性或方法为私有,只能在类的内部使用。
"""

class Player:
    # 公有属性
    name = ""
    number = 0

    # 私有属性
    __age = 0

    def __init__(self, name, number, age):
        self.name = name
        self.number = number
        self.__age = age

    # 私有方法
    def __myAge(self, age):
        self.__age = age

player = Player("kobe", 24, 41)
print(player.name)
print(player.number)
print(player.__age) # 报错,实例不能访问私有变量
player.__myAge(24) # 报错

2. 继承

Python 同样支持类的继承。子类的定义示例如下:

class DerivedClassName(BaseClassName):
    <statement-1>
	......

继承另一个模块的类,可以定义如下:

class DerivedClassName(modname.BaseClassName):

出现继承关系后:

  • 子类(派生类DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。
  • 可以在子类中重写父类的方法,添加额外的功能。
  • super() 函数是用于调用父类的一个方法。

示例:

# 定义一个父类
class People:
    name = ''
    age = 0
    __weight = 0

    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w

    def introduce(self):
        print("我叫%s,今年%d岁。" %(self.name, self.age))


# 定义一个子类,继承People类
class Student(People):
    grade = 0

    def __init__(self, n, a, w, g):
        # 调用父类的构造函数
        People.__init__(self, n, a, w)
        self.grade = g

    # 重写父类的方法
    def introduce(self):
        print("我叫%s,今年%d岁,读%d年级" %(self.name, self.age, self.grade))

stu = Student("zhou", 24, 75, 3)
stu.introduce() # 子类对象调用重写的方法
super(Student, stu).introduce() # 用子类对象调用父类已被重写的方法

输出:

我叫zhou,今年24岁,读3年级
我叫zhou,今年24岁。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值