栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 自学笔记 总结 2.0 面向对象

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 自学笔记 总结 2.0 面向对象

面向对象

1)类与对象

(关键词:

对象 - object ,类 - class ,封装 - encapsulation ,继承 - inheritance ,多态 -polymorphism)

新建——python基础代码——面向对象——New—— File——命名

class Student
#定义了一个学生“类”,有定义方法
    #如果在函数中,那么被称之为类方法
    def  study(self,course_name):
        print(f'学生正在学习{course_name}')


    def play(self):
        print('学生正在玩游戏')

 想要去调用当前类中的方法,首先需要对当前的类实例化,即“()”


2)初始化方法(给student类添加_init_方法)

class Studet:
    #初始化方法.给当前对象创建属性
    def__init__(self,name,age):
        #给当前类添加属性
        self.name=name
        self.age=age
#以上初始化完成



    def study (self,course_name):
        #属性使用self进行调用 ,参数是直接调用
        print(f'{self.name}正在学习{course_name}')


    def play(self):
        print(f{self.name}正在玩游戏')

#实例化类
stu1=Student('顾安',18)
stu1.study('Python 程序设计')            
                                        #顾安正在学习Python程序设计


3)打印对象(两个下划线_ _开头和结尾的方法,称为魔术方法或者魔法方法。)

class Studet:
    #初始化方法.给当前对象创建属性
    def__init__(self,name,age):
        #给当前类添加属性
        self.name=name
        self.age=age
#以上初始化完成



    def study (self,course_name):
        #属性使用self进行调用 ,参数是直接调用
        print(f'{self.name}正在学习{course_name}')


    def play(self):
        print(f{self.name}正在玩游戏')

    #使用类中内置的魔术方法来实现
    def __repr__(self):
        return f'{self.name}:{self.age}'

#实例化类
stu1=Student('顾安',18)
#打印当前对象 
print(stu1)
                                            #顾安正在学习Python程序设计


4)可见性画完属性装饰器

(对象属性可设为私有(private)或受保护(protected))

通过给对象属性名添加前缀下划线的方式来说明属性可见性

例._ _name表示一个私有属性.

    _name表示一个受保护属性.

class Student:
    def _ _init_ _(self,name,age):
        #创建私有属性
        self._ _name=name
        self._ _age=age


    def study(self,course_name ):
        print(f'{self._ _name}正在学习{course_name}')


stu=Student('顾安',18)
stu.study('Python程序设计')
                                #顾安正在学习Python程序设计



 print(stu._ _name)
                                #系统报错,原因:'_ _name'

 Python 并没有从语法上保证私有属性的私密性,可通过方法访问。

即 将print(stu._ _name)更改为print(stu.Studen_ _name)

                        #顾安

Python中可通过 property 装饰器.为“私有”属性提供读取和修改的方法。通常放在类,函数或方法的声明之前,通过一个@符号表示将装饰器应用于类,函数或方法。

class Student:
    def _ _init_ _(self,name,age):
        #创建私有属性
        self._ _name=name
        self._ _age=age

        #获取私有属性
        @property
        def name(self):
            return self._ _name


        #修改私有属性
        @name.setter
        def name(self,name):
            self._ _name=name or '无名氏'


        #获取私有属性
        @property
        def age(self):
            return self._ _age


        def study(self,course_name):
            print(f'{self._ _name}正在学习{course_name}')


stu=Student('顾安',20)
print(stu.age,stu.name)
                                    #20   顾安


stu.name='   '
print(stu.name)
                                    #无名氏


stu.age=30
print(stu.age)
                                    #系统报错  Traceback(most recent call last):   


 5)静态方法和类方法

在面向对象的世界里,一切皆为对象,我们定义的每一个类其实也是一个对象,而静态方法和类方法就是发送给类对象的消息。

那么,什么样的消息会直接发送给类对象呢?

举一个例子,定义一个三角形类,通过传入三条边的长度来构造三角形,并提供计算周长和面积的方法。

计算周长和面积肯定是三角形对象的方法。

在创建三角形对象时,传入的三条边长为必能构造三角形,为此我们可先写一个方法来验证给定的三条边长是否可构成三角形,此方法并不是对象方法,因为在调用这个方法时三角形对象还没有创建出来。可把这类方法设计为静态方法或类方法,也就是说此类方法不是发送给三角形对象的消息,而是发送给三角形类的消息。

class Triangle(object):
    """三角形类"""


    def_ _init_ _(self,a,b,c):
        """初始化方法"""
        self.a=a
        self.b=b
        self.c=c


    #装饰器
    @static method
    def is_vaild(a,b,c):
        """判断三条边长能否构成三角形(静态方法)"""
        return a+b>c and b+c>a and a+c>b


#@class method
#def is_vaild(cls,a,b,c):
#"""判断三条边长能否构成三角形(类方法)"""
#return a+b>c  and b+c>a and a+c>b


def perimeter(self):
    """计算周长"""
    return self.a+self.b+self.c


def area(self):
    """计算面积"""
    p=self.perimter()/2
    return(p*(p-self.a)*(p-self.b)*(p-self.c)**0.5

 在调用静态方法时,不需要对当前类进行实例化

·可以直接使用类名,方法

静态方法与类方法的区别:1}静态方法传入的参数都是普通参数

                                        2}类方法的参数第一位必须是cls,即class,代表当前的方法属于当前的类

                                        3}静态方法是不和当前类进行绑定的,可看成一个单独的函数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号