码迷,mamicode.com
首页 > 其他好文 > 详细

类的封装

时间:2019-03-29 19:02:50      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:obj   方法   regular   login   method   __init__   def   print   个学生   

class Regular(object):
    __discount = 1
    def __init__(self,name,price):
        self.name = name
        self.__price = price
    def __course(self):
        print(AAA)
def course(person):        #即便你用  __course(person):类函数里这么写    _Regular__course(person):实际外部调用这么写
    return person.course() #都不可以这么用做归一化设计,因为这样你就暴露了,而course()根本不可能调用到

alex = Regular(alex,100)
print(alex.price) #真正获取方式是   alex._Regular__price
print(alex.course()) #真正获取方式是  alex._Regular__course(person)
print(Regular.discount) #真正回去方式是 _Regular__discount

不想被别人看到  上面那么做就行了

class Regular(object):
    __discount = 1
    def __init__(self,name,price):  
        self.name = name
        self.__price = price  加了双下划线的变量,只能在类的内部使用
    @property            #将一个函数伪装成属性
    def price(self):
        return self.__price
    @price.setter
    def price(self,value):     #改变这个变量  value是改变为的值
        self.__price = value
    @price.deleter
    def price(self):       #删除这个变量这么做
        del self.__price
alex = Regular(alex,10000)
print(alex.price)
alex.price = 8
print(alex.price)
del alex.price
print(alex.price)

这下面的调用就都跟操作属性一样,这样就是做假操作,迷乱其他人的心智

用属性代表函数上面那么做就好了,而且私有跟property一起用,但是那些函数都要同名

 

class A(object):
    __discount = 100
    def __init__(self,name,price):
        self.name = name
        self.__price = price

    @classmethod
    def get_discount(cls):
        return cls.__discount

    @classmethod
    def change_discount(cls,value):
        cls.__discount = value

    @classmethod
    def del_discount(cls):
        del cls.__discount

print(A.get_discount())
A.change_discount(300)
print(A.get_discount())
A.del_discount()
print(A.get_discount())

因为我们在操作静态变量时候,不需要self,传它没用啊,所以上面用了一个classmethod的装饰器,将一个对象方法,变成类方法

    def func():    # 此时 func是一个静态方法
        print(既不操作和self相关的内容)
        print(也不操作和类名相关的内容)

A.func()


# login 登录

class Student:
    def __init__(self,name):
        self.name = name

    @staticmethod
    def login():
        pass

# 先获取这个学生的用户名和密码
# 判断他登录成功之后进行实例化
# Student.login()
# stu = Student(‘alex‘)

staticmethod

 

类的封装

标签:obj   方法   regular   login   method   __init__   def   print   个学生   

原文地址:https://www.cnblogs.com/CNHK1949/p/10623143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!