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

第二十二课:面向对象(4)

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

第二十二课:面向对象(4)

一、类属性与实例属性         1:实例属性:     

                在__init__(self,...)中初始化     

                内部调用时都需要加上self.     

                外部调用时用“对象名.属性名”调用

        eg:

# 实例属性
class eg():
    def __init__(self,name,food):
        self.name = name
        self.food = food

    #内部调用:self.属性名
    def neibu(self):
        print(self.name,self.food)

#实例化
a=eg('job','fish')

#外部调用:对象名.属性名
a.name='hello'
print(a.name)
2:类属性:

    在__init__()里初始化

    在内部用classname.类属性名调用

    外部既可以用classname.类属性名又可以用instancename.类属性名来调用

        eg:

#类属性
class eg1():

    country = 'China'   #类属性

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

    # 内部调用:类名.类属性名
    def a(self):
        print(eg1.country)

#外部调用:类名.类属性名
print(eg1.country)
3:私有属性:

        双下划线__开头:外部不可通过“对象名.属性名”来访问或者更改,实际将其转化为了“_类名__属性名”。

        eg:

#私有属性
class eg2():
    def __init__(self,name,food,country):
        self.name = name
        self.food = food

        self.__country = country    #私有属性

    def a(self):
        print('我是私有属性:%s'%self.__country)

#实例化
b=eg2('MgVccl','fish','China')

#外部不可通过“对象名.属性名”来访问私有属性
print(b.country) # AttributeError: 'eg2' object has no attribute 'country'
二、访问限制

       1. 私有类属性、私有对象属性 

        为了保护属性不被随意修改和访问,可以将属性定义为私有属性。 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。

        2.私有属性不能直接通过对象访问属性,但是可以通过“实例化对象名._类名__属性名”直接进行访问。但是不建议这样操作.不同版本的Python解释器可能会把“__属性名”改成不同的变量名。 总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉。

        3.通过“对象名.__属性名”直接修改私有属性。

         表面上看好像修改了其实并没有,因为Python解释器已经将对象内部的属性名解释成“_类名__属性名”。如果在外部修改相当于另外声明一个属性。 能直接修改吗?类属性可以直接修改通过类名._类名__属性名=(可通过类方法定义后面说明)。

        eg:

class eg3():
    def __init__(self,name,food,country):
        self.name = name
        self.food = food

        self.__country = country    #私有属性

    def a(self):
        print('我是私有属性:%s'%self.__country)

#实例化
c=eg3('MgVccl','fish','China')

#可以通过“实例化对象名._类名__属性名”直接进行访问
#不建议这样操作.不同版本的Python解释器可能会把“__属性名”改成不同的变量名。
# print(c._eg3__country)

#在外部修改相当于另外声明一个属性
c.__country='重庆'
print(c.__country)

练习:

        使用面向对象的方式实现加减乘除四则运算。

#使用面向对象的方式实现加减乘除四则运算。
class operation():
    '''
    加减乘除的四则运算:
    加法:add(x,y) x+y;
    减法:sub(x,y) x-y;
    乘法:mul(x,y) x*y;
    除法:div(x,y) x/y;
    '''

    #实例化属性
    def __init__(self,x,y,s):
        self.x = x
        self.y = y
        self.s = s

    #     加法:add(x,y) x+y
    def add(self):
        self.s = self.x + self.y
        return print('%d + %d = %d'%(self.x,self.y,self.s))

    # 减法:sub(x,y) x-y
    def sub(self):
        self.s = self.x - self.y
        return print('%d - %d = %d'%(self.x,self.y,self.s))

    # 乘法:mul(x,y) x*y
    def mul(self):
        self.s = self.x * self.y
        return print('%d * %d = %d'%(self.x,self.y,self.s))

    # 除法:div(x,y) x/y
    def div(self):
        if self.y == 0:
            print('除数不能为0!')
        else:
            self.s = self.x / self.y
            return print('%d / %d = %d'%(self.x,self.y,self.s))

if __name__ == '__main__':
    x=int(input('请输入x:'))
    y=int(input('请输入y:'))
    s=0
    a=operation(x,y,s)
    a.add()
    a.sub()
    a.mul()
    a.div()

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

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

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