python学习 面向对象封装

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习 面向对象封装相关的知识,希望对你有一定的参考价值。


from collectoins import namedtuple
Point=namedtuple(‘point‘,[‘x‘,‘y‘])
t1=Point(1,2)
print(t1.x)
print(t1.y)
没有方法的类属性不会发生变化
    定义简单
 不能改变
面向对象封装
私有属性!!!
私有方法!!!
用装饰器描述的几个方法
@property !!!
@classmethod!!
@staticmethod!

封装:
class Teacher:
     def __init__(self,name,pwd):
      self.name=name
   self.pwd=pwd
alex=Teacher(‘alex‘,‘3714‘)
print(alex.pwd)  这样不安全
定义一个私有属性:
    self.__pwd=pwd
 这样pwd就变成了私有属性
只能自己的类里面用方法用:
    def func(self):
   print(self.__pwd)
   这样在类自己的方法里可以用
方法也可以私有化
同样
可以在实例化的时候直接调用方法,在里面self.方法()
还有私有静态属性
如果想要调用的话_类名__方法、静态属性、属性
只能在内部进行私有属性、私有方法、私有静态属性的定义

利用私有属性和私有方法进行密码加密:
class Teacher:
    def __init__(self,name,__pwd):
        self.name=name
        self.__pwd=__pwd
    def __p(self):
        return hash(self.__pwd)
    def oi(self,pwd):
        return hash(pwd)==self.__p()
so=Teacher(‘alex‘,2222)
ret=so.oi(2221)
print(ret)

什么时候会用到私有方法:
1.有一些方法只是用来作为中间结果
2.父类的方法不希望子类继承
私有属性用法例子:
class Person:
    def __init__(self,height,weight):
        self.__height=height
        self.__weight=weight
    def jisuan(self):
        return  self.__weight/(self.__height*self.__height)
    def change(self,new,neww):
        if neww >20:
            self.__weight=neww
            self.__height=new
        else:
            print(‘体重过轻‘)
jing=Person(1.70,52)
print(jing.jisuan())
jing.change(1.65,42)
@property  把一个方法伪装成属性,直接加在方法上面,调用的时候就是属性了
class Fang:
    def __init__(self,name,chang,kuan):
        self.name=name
        self.__chang=chang
        self.__kuan =kuan
    @property
    def get_1(self):
        return self.name,self.__chang*self.__kuan
jing=Fang(‘jing‘,55,22)
print(jing.get_1)
@方法名.setter  修改函数伪装成的属性的值
def 方法名(self,zhi):
     self.变量名=zhi
 
私有方法是不可以被子类继承的方法
@staticmethod
类里面的方法就可以不传参数了
不能将函数独立的放在类外面  完全使用面向对象编程的时候
并且这个函数完全不需要依赖对象的属性和类的属性
就可以用staticmethod装饰这个函数
静态方法:没有必须传的参数 方法不需要用对象的属性和类的属性
普通方法:必须穿一个对象 可以使用对象的属性和类的属性
类方法:必须传一个类,方法不需要使用对象的属性,但可以使用类的属性
@classmethod   里面传cls

























































































以上是关于python学习 面向对象封装的主要内容,如果未能解决你的问题,请参考以下文章

学习PYTHON之路, DAY 7 - PYTHON 基础 7 (面向对象基础)

Python面向对象日志类的封装#学习猿地

python学习笔记DAY16(面向对象编程)

python 学习 [day7]面向对象

Python学习—面向对象学习上

Python学习笔记-面向对象进阶封装多态继承