第二十六天对属性的修改:

Posted ab461087603

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二十六天对属性的修改:相关的知识,希望对你有一定的参考价值。

1.怎么进行以后大程序的书写:

首先要创建一个core的包:然后再创建一个core的py文件用于主要函数的书写

技术图片

 

 

 2.然后在创建一个db的包用于存放用户所写的数据:

3再创建一个conf的包,然后存放文件打开的路径:即把db中放数据的文件路径放到conf。py文件中

4.再创建一个bin文件包里面建立一个statt的py文件

.对私有属性和方法的查看方法:

技术图片
class Person:
    def __init__(self,name,sex):
        self.name=name
        self.__sex=sex
    def get_sex(self):  #查看私有属性的方法
        return self.__sex
jin=Person(jin,不想)
print(jin.get_sex())
结果为
不想
View Code

6.对私有属性的修改方法:

技术图片
class Person:
    def __init__(self,name,sex):
        self.name=name
        self.__sex=sex
    def get_sex(self):  #查看私有属性的方法
        return self.__sex
    def set_sex(self,new_sex):  #对私有属性进行修改的方法:
        if type(new_sex)is str and not new_sex.isdigit():
            self.__sex=new_sex
        else:
            print(你输入的不合法)
jin=Person(jin,不想)
print(jin.get_sex())
jin.set_sex(2)
jin.set_sex(小九年)
print(jin.get_sex())
结果为
不想
你输入的不合法
小九年
View Code

7.如果父类中有私有属性和方法,那么子类可以继承吗?

技术图片
class Person:
    __key=123
class Fll(Person):
    def __init__(self):
        print(Person.__key)
jin=Fll()
结果为
Traceback (most recent call last):
  File "D:/python练习程序/第二十六天/封装.py", line 36, in <module>
    jin=Fll()
  File "D:/python练习程序/第二十六天/封装.py", line 35, in __init__
    print(Person.__key)
AttributeError: type object Person has no attribute _Fll__key
View Code

  通过上述的报错我们可以得出:父类中的私有属性没有办法指向子类,也就是说子类无法继承父类的私有属性和方法

8,总结:私有属性使用的途径:(说实话都是进行属性和方法的保护)

  1.隐藏起来,这个属性不想被外面的对象调用

  2.这个属性的值不想被随意进行改变

  3.这个属性和方法,不想被子类进行继承

9.内置函数·1property  把一下听起来名字像名词但是定义为类的方法伪装成属性的内置函数:

  案例一:求圆的面积和周长为例:周长和面积挺起来是名词,属于属性但是我们定义成方法,像得到某个东西或者攻击这种才是动词属于方法:

技术图片
from math import pi
class Circle:
    def __init__(self,r):
        self.r=r
    @property  #调用此内置函数可以让某些类的方法伪装成属性来使用,而且此方法的括号
    def permeter(self):#中不允许有新的变量传入
         return 2*pi*self.r
    @property
    def area(self):
        return (self.r**2)*pi
c1=Circle(4)
print(c1.permeter)  
print(c1.area)
结果为
25.132741228718345
50.26548245743669
View Code

10.既然上述把方法变成了属性,在类中属性的值是可以进行修改的,那么这个伪装的属性可以进行修改吗:

答:是不能的,他只是通过装饰器伪装成一个属性,在程序内部其实还是执行的类的方法:

11.一个计算·Bim指数的方法:把他的方法用属性来进行表示:

技术图片
class Bim:
    def __init__(self,weight,height):
        self.weight=weight
        self.height=height
    @property
    def get_bim(self):
        return self.weight/(self.height**2)
b1=Bim(80,1.78)
print(b1.get_bim)
结果为
25.24933720489837
25.24933720489837
View Code

12.如果把某个方法变成了属性,

技术图片
class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):
        return self.__name+sb
tiger=Person(老虎)
print(tiger.name)
结果为
C:pycharmpython.exe D:/python练习程序/第二十六天/封装.py
老虎sb
View Code

13.方法伪装成属性之后对象就没哟办法再去调用此方法,如果使用就会报错

技术图片
class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):
        return self.__name+sb
tiger=Person(老虎)
print(tiger.name)
tiger.name()#如果在使用此对象来调用此方法会报错
结果为
老虎sb
Traceback (most recent call last):
  File "D:/python练习程序/第二十六天/封装.py", line 67, in <module>
    tiger.name()
TypeError: str object is not callable
View Code

14可以使用setter方法来进行重命名:

技术图片
class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):  
        return self.__name+sb
    @name.setter   #使用此方法可以让伪装方法的属性进行赋值#并且命名的名字要和属性一致
    def name(self,new_name):#如果不一致就会报错
        self.__name=new_name
tiger=Person(老虎)
print(tiger.name)
tiger.name=全班
print(tiger.name)
结果为
老虎sb
全班sb
View Code

15如果某个超市进行打折活动,想要把所有商品进行打折,这个程序用类怎么进行写:

技术图片
class Good:
    discount=0.5
    def __init__(self,name,price):
        self.name=name
        self.__price=price
    def price(self):
        return Good.discount*self.__price
apple1=Good(apple,5 )
print(apple1.price)
结果为
<bound method Good.price of <__main__.Good object at 0x000002073FE36A58>>
View Code

  这个为地址,也就是说这一个

技术图片
class Good:
    discount=0.5
    def __init__(self,name,price):
        self.name=name
        self.__price=price
    @property
    def price(self):
        return Good.discount*self.__price
apple1=Good(apple,5 )
print(apple1.price)
结果为
2.5
View Code

16.对伪装的类进行删除操作:

技术图片
class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):
        return self.__name+sb
    @name.setter   #使用此方法可以让伪装方法的属性进行赋值#并且命名的名字要和属性一致
    def name(self,new_name):#如果不一致就会报错
        self.__name=new_name
    @name.deleter   
    def name(self):   #第五个
        del self.__name
tiger=Person(老虎)
print(tiger.name)
tiger.name=全班
print(tiger.name)
del tiger.name  #这个指令会跳到第五个类的方法,执行这里面的语句
View Code

  通过下面这个程序看此方法的执行过程:

技术图片
class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):
        return self.__name+sb
    @name.setter   #使用此方法可以让伪装方法的属性进行赋值#并且命名的名字要和属性一致
    def name(self,new_name):#如果不一致就会报错
        self.__name=new_name
    @name.deleter
    def name(self):   #第五个
        print(执行了删除操作)
tiger=Person(老虎)
print(tiger.name)
tiger.name=全班
print(tiger.name)
del tiger.name  #这个指令会跳到第五个类的方法,执行这里面的语句
结果为
老虎sb
全班sb
执行了删除操作
View Code

17.

 

以上是关于第二十六天对属性的修改:的主要内容,如果未能解决你的问题,请参考以下文章

Mysql基础第二十六天,使用存储过程

第二十六天Python学习记录

伪静态页面(10.24 第二十六天)

第二十六天打卡

javaSE第二十六天

团队冲刺第二十六天