第二十六天对属性的修改:
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()) 结果为 不想
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()) 结果为 不想 你输入的不合法 小九年
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‘
通过上述的报错我们可以得出:父类中的私有属性没有办法指向子类,也就是说子类无法继承父类的私有属性和方法
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
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
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
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
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
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>>
这个为地址,也就是说这一个
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
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 #这个指令会跳到第五个类的方法,执行这里面的语句
通过下面这个程序看此方法的执行过程:
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 执行了删除操作
17.
以上是关于第二十六天对属性的修改:的主要内容,如果未能解决你的问题,请参考以下文章