在python中定义私有的变量/函数只需要在变量名或函数名前面加上"__"(即两个下划线),那么这个函数或变量就会变成私有的了。
一、字段:
普通字段属于对象,静态字段属于类;
class Province:
# 静态字段
country = '中国'
def __init__(self, name):
# 普通字段 普通字段在每个对象中都要保存一份
self.name = name
# 直接访问普通字段
obj = Province('河北省')
print obj.name
# 直接访问静态字段 静态字段在内存中只保存一份
Province.country
定义私有的变量只需要在变量名或函数名前面加上"__"两个下划线,那么这个函数或变量就会变成私有的了。(原理:python会将双下划线开头的名字进行改编,重新命名,改成"_类名_属性名/方法名")
二、方法:(在所有方法中self参数与cls参数都是放在第一位的,而且都是显示声明,隐示被赋值)
1、Python中3种方式定义类中的方法:普通方法、 @classmethod修饰的方法、 @staticmethod修饰的方法
普通方法:需要self参数隐式的传递当前类对象的实例(self通常用作实例方法的第一参数)。
@classmethod修饰的方法:需要cls参数传递当前类对象(cls通常用作类方法的第一参数)。
@staticmethod修饰的方法:就是一个正常的方法定义(按业务需求设置参数,也可以根本没有参数)。
2、Python中特殊方法:
__init__(self, param1, param2, ...):类似于java中的构造方法,init方法不能有返回值
__new__(cls[,...]):对象实例化时调用的方法,返回一个类对象
。。。。
三、属性:(访问属性时可以制造出和访问字段完全相同的假象)
属性由方法变种而来,如果Python中没有属性,方法完全可以代替其功能。
@property装饰器,就是负责把类中方法变成可读属性来使用(再配合 @方法名.setter 就把类中方法变成可读写属性来使用)。
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
结果:
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
四、类的继承(python可以有多继承,一个类可以有两个以上父类):
1、类的继承(直接在类名后面括号里面写入要继承的类名),例 class DerivedClassName(BaseClassName):
2、子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性。