一、私有变量和私有方法
私有属性分为两类分别是对象的私有变量以及类的静态私有变量,除了变量外,还有私有方法;在类中,所有私有的属性和方法都是在变量的左边加上双下划线的方式定义,所有的私有变量和私有方法都不能在类的外部使用
<代码>类人(): __pwd=" 123456 " #私有静态变量 def __init__(自我、名称、价格): self.name=名字 自我。__price=价格#私有变量 #私有方法 def __add_price(自我): 返回self.__price * 2 eric=人(eric, 20000000) #私有变量和方法无法在外部调用,虽然可以通过_类名__属性名方式调用私有变量,但不提倡使用 打印(eric._Person__price) 打印(eric._Person__pwd) print (eric._Person__add_price()) 代码>
<代码> 20000000 123456 40000000 代码>
二、类的属性
python的属性其实是普通方法的变种
有两种定义方式:
1,普通方法加上财产装饰器
2,在类中定义值为财产对象的静态字段
属性装饰器方式
属性是一种特殊的属性,当我们访问被财产装饰的函数时,执行函数内的代码,得到返回值。
<代码>从数学进口π 类圆(): def __init__(自我,半径): 自我。半径为半径 @ property def周长(自我): 2π* * self.radius返回 @ property def区域(自我): 返回self.radius * * 2 *π c1=圆(5) #未带装饰器调用方法 #打印(c1.area ()) #带装饰器时当成属性调用 打印(c1.area) 代码>
使用财产装饰器定义属性时,要注意被财产装饰的普通方法只能有自我一个参数,并且在调用时不需要加()。
在python3之后,所有的类默认继承了对象,所以说,所有的类都是新式类,新式类的属性有三种访问方式,并分别对应了三个被@ property @方法名这里,@方法名delete修饰的方法
<代码>类产品(对象): def __init__(自我): #原价 自我。original_price=100 #折扣 自我。折扣=0.8 @ property def价格(自我): #实际价格=原价*折扣 new_price=自我。original_price * self.discount 返回new_price @price.setter def价格(自我价值): 自我。original_price=值 @price.deleter def价格(自我): 德尔self.original_price obj=货物() 打印(obj.price) #获取商品价格 obj。价格=200 #修改商品原价 德尔obj。价格#删除商品原价 代码>
静态字段方式
静态字段方式没有新式类和经典类的区别;静态字段定义方式也有三种访问方式:分别对应了三个被@ property @方法名这里,@方法名delete修饰的方法
<代码>类人(): def __init__(自我、名称): 自我。__name=名字 def get_name(自我): 返回self.__name def set_name(自我,新名称): 自我。__name=新名称 def del_name(自我): 德尔self.__name NAME=属性(get_name set_name del_name) #定义财产静态字段 obj=人(eric) 打印(obj.NAME) #调用get_name方法 obj。NAME=" 111 " #调用set_name方法 德尔的人。名字#调用del_name方法代码>
三、类的方法
方法包括:普通方法,静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
<代码>普通方法:由对象调用,至少一个自我参数,执行普通方法时,自动将调用该方法的对象赋值给自我; 类方法:由类调用,至少一个cls参数,执行类方法时,自动将调用该方法的类复制给cls; 静态方法:由类调用;无默认参数;代码>
<代码>类商品(): __discount=0.8 def __init__(自我、名称、价格): self.name=名字 自我。__price=价格 def价格(自我):#普通方法 返回self.__price * Goods.__discount @classmethod new_discount def change_discount (cls): #类方法 cls。__discount=new_discount @staticmethod def get_user_pwd(): #静态方法 用户输入=(“请输入用户名:”) pwd=输入('请输入pwd: ') 苹果=货物(“苹果”,10) Goods.change_discount(0.9) #类方法调用 Goods.get_user_pwd() #静态方法调用 代码>