python 封装 继承 多态 例子_Python——类、面向对象,封装 继承 多态

在面向对象的方法中,可以根据某些事物或者情景创建类,并基于这些类来创建对象。编写类时,定义一大类对象都有通用行为,基于类创建的对象,每个对象都自动具备这个类的通用行为。

根据类来创建对象被称为实例化。

在Python中编写类的方式如下:

class Dog():

'''创建小狗的类'''

def __init__(self,name,age):

self.name = name

self.age = age

'''动作方法 蹲下'''

def sit(self):

print(self.name+'蹲下了'+self.age)

方法init()

init()是一个特殊的方法,每当根据类创建类的实例时,Python都会自动运行这个方法。在这个方法中开头和末尾各有两个下划线。这是一种约定。避免Python默认方法与普通方法发生名称冲突。

init()定义中我们传递了三个参数:self、name和age。这个初始化方法中self是必须的。而且还必须位于其他的形参前面。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用。让实例能够访问类中的属性和方法

在init()方法中定义的两个变量都有前缀self。以self为前缀的变量都可供类中的所有方法使用。

init()没有并没有显式地包含return语句,但Python自动返回类对象的实例。

Python2.7创建类的方法

在Python2.7中创建类

class ClassName(Object):

...

根据类创建实例

my_dog = Dog('dog1',22)

my_dog.sit()

访问属性

可以根据实例访问实例的属性。在执行时,Python会先找到实例,再查找与这个实例相关联的属性name.

print(my_dog.name)

为属性指定默认值

类中的每个属性都必须有初始值,我们可以为类的属性指定默认值。

class Car():

def __init__(self, name, year, price):

self.name = name

self.year = year

self.price = price

self.owner = 'dos auto'

def get_car_name(self):

return self.name

def get_car_woner(self):

return self.owner

my_car = Car('benz', 11, 2000000)

print(my_car.get_car_name())

print(my_car.get_car_woner())

类的继承

在上面总结的类的定义的时候,我们声明类的时候是从空白开始的,如果我们要声明定义的类是继承某一个类可以在此指定要继承的父类

定义子类时,必须在括号内指定父类的名称

在创建子类的实例时,Python首先需要给父类的所有属性赋值。

创建子类时,父类必须包含在当前文件中,且位于子类前面。

子类中可以使用super()代表父类的引用。

class Car():

def __init__(self, name, year, price):

self.name = name

self.year = year

self.price = price

self.owner = 'dos auto'

def get_car_name(self):

return self.name

def get_car_woner(self):

return self.owner

'''子类,电动汽车'''

class ElectricCar(Car):

def __init__(self, name, year, price):

super().__init__(name, year, price)

my_tesla = ElectricCar('tesla', 2, 200000)

print(my_tesla.get_car_woner())

print(my_tesla.get_car_name())

隐含的超类——object

每一个python类都隐含了一个超类:object,这个类是一个非常简单的定义,这个类几乎不做任何事情。对象生命周期的基础是创建、初始化和销毁。所有类的超类object都有一个默认包含pass的init()方法的实现。

继承中的init 方法

子类可以不重写init方法,实例化子类时,会自动调用父类中已经定义的init

如果子类中定义了init,也就是说子类重写了init,则不会再去自动调用父类中已定义的init方法

最好显式调用超类的init方法

看几个栗子

class father1:

def say_something(self,args):

print(args)

class father2:

def say_something2(self,args):

print(args)

class son:

def __init__(self):

print(self)

s = son()

>>>

上面的程序中,在构造son的实例对象时会自动调用son的已定义的init方法

'''

继承中的__init__

'''

class father1:

def say_something(self,args):

print(args)

class father2:

def __init__(self):

print("father2 init")

def say_something2(self,args):

print(args)

class son(father2):

def __init__(self):

print(self)

s = son()

上面的方法中,父类定义了init方法,但是子类重写了父类的init方法,这样程序就不会再调用父类的init方法了。除非显式调用父类的init方法:

class son(father

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的封装继承多态面向对象编程的三个重要概念。封装是指将数据和方法封装在一个对象中,使得对象能够对外提供统一的接口,隐藏内部的实现细节。继承是指一个可以继承另一个的属性和方法,以达到代码重用的目的。多态是指一个对象可以根据上下文的不同而表现出不同的行为。 Python中的封装通过使用来实现。一个可以包含属性和方法,属性用于存储数据,方法用于处理数据。封装的好处是可以保护数据的安全性,只允许通过特定的接口来访问和修改数据。通过使用访问修饰符(如public、private和protected)可以控制属性的访问权限。 继承是通过创建一个新的继承现有的属性和方法。子默认继承的所有属性和方法,并且可以对继承进行拓展,添加新的属性和方法。继承可以提高代码的重用性和可维护性。 多态是指一个对象可以根据上下文的不同而表现出不同的行为。在Python中,多态没有明显的特殊语法,因为Python的函数的参数不必声明数据型。不同的对象可以调用相同的方法,但是根据对象的型不同,方法的实现会有所不同。这种灵活性使得代码更加可扩展和可重用。 综上所述,Python封装继承多态面向对象编程中的重要概念,它们可以帮助我们更好地组织和管理代码,提高代码的可维护性和可重用性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【初学者必备】python封装继承多态笔记](https://download.csdn.net/download/qq_24067389/10476443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python 封装继承多态](https://blog.csdn.net/qq_49873907/article/details/130069640)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python面向对象:封装继承多态](https://blog.csdn.net/weixin_44740756/article/details/117304944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值