zoukankan      html  css  js  c++  java
  • Python类总结-字段,方法,属性区别及StaticMethod, Property,私有字段和私有属性

    • 类包含下列
      • 静态属性
      • 动态属性
      • 静态方法
      • 动态方法
    class Province:
        #静态字段--属于类,调用方法类.字段名
        memo = "中国23个省之一"
    
        #动态字段--属于对象,调用方式实例化对象.字段名
        def __init__(self, name, capital, leader):
            self.Name = name
            self.Capital = capital
            self.Leader = leader
    
        #动态方法--属于对象
        def sports_game(self):
            print(self.Name + '正在开运动会')
    
        #静态方法--属于类
        @staticmethod
        def Foo(): #去掉self参数, 静态方法属于类
            print('每个省要带头反腐')
    
        @property #把方法变成一个特性
        def Bar(self):
            print(self.Name)
            return 'something'
    
    hb = Province('河北','石家庄','李阳') #hb = 类定义中self参数
    sd = Province('山东','济南','王盛辉')
    
    print(hb.Capital)
    print(hb.memo)         #动态的对象可以访问静态类的静态字段
    # print(Province.Name) #静态类不可以访问动态字段,name,capital,leader为动态字段
    print(Province.memo)
    
    hb.sports_game() #对象可以访问动态方法
    sd.sports_game()
    
    Province.Foo() #静态类可以访问静态方法
    hb.Foo()       #动态对象可以访问静态方法
    
    #访问特性
    hb.Bar #无需括号, 把方法访问形式转变为字段访问形式
    print(hb.Bar)
    
    >>>>>>>>>
    石家庄
    中国23个省之一
    中国23个省之一
    河北正在开运动会
    山东正在开运动会
    每个省要带头反腐
    每个省要带头反腐
    河北
    河北
    something
    
    

    私有字段,私有方法-- __变量名

    class Province:
        #静态字段--属于类,调用方法类.字段名
        memo = "中国23个省之一"
    
        #动态字段--属于对象,调用方式实例化对象.字段名
        def __init__(self, name, capital, leader,flag):
            self.Name = name
            self.Capital = capital
            self.Leader = leader
            #定义私有字段,__变量名
            self.__Thailand = flag
    
        #动态方法--属于对象
        def sports_game(self):
            print(self.Name + '正在开运动会')
    
        #静态方法--属于类
        @staticmethod
        def Foo(): #去掉self参数, 静态方法属于类
            print('每个省要带头反腐')
    
        @property #把方法变成一个特性
        def Bar(self):
            print(self.Name)
            return 'something'
    
        #间接调用私有变量
        def show(self):
            print(self.__Thailand)
    
        #构造一个Thailand函数,返回类中的私有变量__Thailand
        @property#构造函数
        def Thailand(self):
            return self.__Thailand
    
    
        #定义私有方法
        def __sha(self):
            print('我是Alex')
    
        #类中可以访问私有方法
        def Foo2(self):
            self.__sha()
    
    japan = Province('日本','济南','王盛辉',True)
    # print(japan.__Thailand) #出错,私有变量不可访问
    japan.show()
    japan.Foo2()
    print(japan.Thailand)
    japan._Province__sha() #可以通过_Province__sha()显式调用私有变量,但不建议
    
    >>> 
    True
    我是Alex
    True
    

    修改私有属性的方法-Setter

    
    class Province(object): #使用构造函数setter时候需要继承object
        #静态字段--属于类,调用方法类.字段名
        memo = "中国23个省之一"
    
        #动态字段--属于对象,调用方式实例化对象.字段名
        def __init__(self, name, capital, leader,flag):
            self.Name = name
            self.Capital = capital
            self.Leader = leader
            #定义私有字段,__变量名
            self.__Thailand = flag
    
        #动态方法--属于对象
        def sports_game(self):
            print(self.Name + '正在开运动会')
    
        #静态方法--属于类
        @staticmethod
        def Foo(): #去掉self参数, 静态方法属于类
            print('每个省要带头反腐')
    
        @property #把方法变成一个特性
        def Bar(self):
            print(self.Name)
            return 'something'
    
        #间接调用私有变量
        def show(self):
            print(self.__Thailand)
    
        #构造一个Thailand函数,返回类中的私有变量__Thailand
        @property#构造函数,只读
        def Thailand(self):
            return self.__Thailand
        #推荐修改私有变量的方法
        @Thailand.setter#构造函数, 可以修改@函数名.setter(self,传个值)
        def Thailand(self,value):
            self.__Thailand = value
    
        #定义私有方法
        def __sha(self):
            print('我是Alex')
    
        #类中可以访问私有方法
        def Foo2(self):
            self.__sha()
    
    japan = Province('日本','济南','王盛辉',True)
    print(japan.Thailand)
    japan.Thailand = False
    print(japan.Thailand)
    
  • 相关阅读:
    通过使用精简客户端,且不需要安装的客户端,配合PLSQL连接oracle数据库
    JDBC连接
    多线程TCP的socket通信
    基于UDP协议的socket通信
    基于TCP协议的socket通信
    设计模式之单例模式
    设计模式之代理模式
    设计模式之策略模式
    >hibernate-session中的方法
    >hibernate的四种状态
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9668275.html
Copyright © 2011-2022 走看看