资讯专栏INFORMATION COLUMN

面向对象和类总结

yibinnn / 1221人阅读

摘要:目的是简化调用者的流程经典类装饰器新式类装饰器执行结果类属性方式定义价格描述

面向对象

类和对象:类是模版,对象是类创建出来的一个具体的存在

类的三要素:类名(单词首字母必须大写,单词间无下划线),属性,方法

使用名词提炼法来设计一个类

一)类的基础
dir(对象) 查看该对象的所有方法和属性

创建对象:类名()

初始化方法:
当使用类名创建对象时,会自动执行如下操作
1)为对象在内存中分配空间 __new__方法做的事情
2)为对象的属性设置初始值,也就是__init__方法做的事情。它是对象的内置方法。创建对象时,会自动执行初始化方法
即创建一个对象时,先执行new创建内存空间,然后执行init方法,为申请的空间初始化

__del__对象在销毁前,会被自动调用,如果想在销毁前做一些事情,可以重写此方法
__str__返回对象的描述信息,pirnt(对象)会打印对象的信息,如果想要自定义打印信息,可以重写此方法,但返回值必须是str

二)
面向对象特性———封装
通过需求分析提取属性和方法整合成一个类,即封装
在对象的方法内部,是可以直接访问和使用对象的属性的。

面向对象特性———继承
继承:不需要重写重复的代码
子类拥有父类的全部属性和方法,但不能直接使用父类的私有属性和方法
class 子类(父类):
继承的传递性:子类可以继承父类的父类的所有属性和方法

面向对象特性——多态
不同的子类对象调用相同得父类方法,产生不同的执行结果,
可以增加代码的灵活度,以继承和方法的重写为前提

三)特殊方法
1)类属性,类方法
实例,实例化,实例属性,实例方法
类是特殊的对象——类对象,在内存中只有一份

类属性定义——在类的下方使用赋值语句定义即可,访问类属性,使用类名.类属性。

类属性在内存中只有一份;实例属性在每个对象中都要保存一份。

类属性存储的内容是大家共有的。---那就定义成类属性。

类方法定义——-使用classmethod和cls来定义,

@classmethod

def 类方法(cls):
    
    pass

访问类方法,使用类名.类方法

2)静态方法
定义:既不需要访问类方法类属性,实例方法,实例属性时,可以定义此方法为静态方法
格式:需要staticmethod,但不需要传入self

@staticmethod  

def 静态方法():
    
    pass

访问静态方法: 类名.静态方法()

3) 实例方法,类方法,静态方法的选择
实例方法:方法内部访问实例属性,或者访问类属性时
类方法:方法内部只访问类属性
静态方法:不需要访问类属性和实例属性。

class Foo(object):

    #类属性
    country = "China"

    #初始化方法
    def __init__(self, name):
        #实例属性
        self.name = name

    #实例方法
    def func(self):
        print(self.name)
        print("实例方法")

    #类方法
    @classmethod
    def cls_func(cls):
        print("类方法")

    #静态方法
    @staticmethod
    def static_fun():
        print("静态方法")

foo = Foo("shenzhen")

print(Foo.country)  #打印类属性
print(foo.name)     #打印实例属性

foo.func()       #调用实例方法
Foo.cls_func()   #调用类方法
Foo.static_fun() #调用静态方法

四)property属性
定义property属性有两种方式,分别是装饰器和类属性, 装饰器还分为经典类和新式类。

1)经典类--装饰器方式定义:在实例方法的上面加上@property装饰器,并且仅有一个self参数,然后调用时,不需要加括号。
2)新式类--装饰器方式定义:有三种访问方式,@property,@方法名.setter, @方法名.deleter
3)类属性方式定义:使用property方法,有四个参数,具体看例子说明。

一般是property属性内部进行一系列的逻辑计算,然后将计算结果返回。
目的是简化调用者的流程
eg:

经典类--装饰器

class Person(object):

    def __init__(self, name):
        self.name = name

    @property
    def age(self):
        return 18

xiaoming = Person("xiaoming")
print(xiaoming.age)

新式类--装饰器

class Person1(object):

    def __init__(self, name):
        self.name = name

    @property
    def age(self):
        print("property")

    @age.setter
    def age(self, value):
        print("age.setter")

    @age.deleter
    def age(self):
        print("age.deleter")

xiaoming1 = Person1("xiaoming1")
xiaoming1.age
xiaoming1.age = 200
del xiaoming1.age

执行结果:
property
age.setter
age.deleter

类属性方式定义

class Good(object):

    def __init__(self):
        self.price = 100
        self.discount = 0.8

    def get_price(self):
        new_price = self.price * self.discount
        return new_price

    def set_price(self, value):
        self.price = value

    def del_price(self):
        self.price

    PRICE = property(get_price, set_price, del_price, "价格描述")

good = Good()
good.PRICE
good.PRICE = 200
del good.PRICE

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43677.html

相关文章

  • 第3章:抽象数据类型(ADT)和面向对象编程(OOP) 3.4面向对象编程(OOP)

    摘要:抽象数据类型的多个不同表示可以共存于同一个程序中,作为实现接口的不同类。封装和信息隐藏信息隐藏将精心设计的模块与不好的模块区分开来的唯一最重要的因素是其隐藏内部数据和其他模块的其他实施细节的程度。 大纲 面向对象的标准基本概念:对象,类,属性,方法和接口OOP的独特功能 封装和信息隐藏 继承和重写 多态性,子类型和重载 静态与动态分派 Java中一些重要的Object方法设计好的类面向...

    Heier 评论0 收藏0
  • 乐字节Java编程语言发展、面向对象和类

    摘要:二面向对象概述面向过程的设计思想和面向对象的设计思想我要吃鱼香肉丝盖饭面向过程我买菜我洗菜我切菜我放水我点火我做饭我炒菜。。。。 大家好,上次我们讲过了乐字节Java编程之方法、调用、重载、递归,接下来我们将会进入到Java封装的内容。Java编程语言发展,面向对象和类。 一、编程语言的发展 机器语言——直接由计算机的指令组成,指令、数据、地址都以0和1组成:可以被计算机直接识别并执行...

    lufficc 评论0 收藏0
  • 7. 初步理解面向对象 【连载 7】

    摘要:是一种典型的面向对象编程语言。这篇文章主要是来初步理解一下面向对象的思维为下面的内容先给一个基础。针对面向对象编程的更多内容,会在后面的文章里面详细解释。他们都称之为对象。之后,我们再用编程语言,把这种映射编写出来,就是的面向对象编程啦。 showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...

    keelii 评论0 收藏0
  • PHP经验总结 - 聊聊面向对象

    摘要:例如汽车这个名词可以理解为汽车的总类,但这辆宝马汽车则是一个具体的汽车对象。当在类成员方法内部调用的时候,可以使用伪变量调用当前对象的属性。在面向对象中则被称之为方法。 简述 现在大伙都在讲面向对象编程,但是我们也得先找着一个对象是不?不然怎么面向对象?怎么编程? --- 笑话一则,但是理不亏,要搞P面向对象编程,我们起码要先搞懂对象(还有类)是什么?只有了解它,理解它,你才能驾驭它。...

    lpjustdoit 评论0 收藏0
  • Java™ 教程(抽象方法和类

    抽象方法和类 抽象类是一个声明为abstract的类 — 它可能包括也可能不包括抽象方法,抽象类无法实例化,但可以进行子类化。 抽象方法是在没有实现的情况下声明的方法(没有大括号,后跟分号),如下所示: abstract void moveTo(double deltaX, double deltaY); 如果一个类包含抽象方法,那么该类本身必须被声明为abstract,如: public abs...

    Amio 评论0 收藏0

发表评论

0条评论

yibinnn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<