1、Student.py
'''
面向对象
__init__方法相当于Java中的构造方法
变量名修饰:
_xxx:"单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问;不能用'from module import *'导入
__xxx:类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通。)," 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
__xxx__:系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,用于预定义的特殊属性
类属性与实例属性的区别:实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。
类方法:在方法上加@classmethod修饰,该方法就成了类方法
主:因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。
'''
class Student:
#类属性
domina="Chinese"
def __init__(self,id,name,age,income,address,**kw):
#实例属性
self.id=id;
self.name=name;
self.age=age;
#private私有属性
self.__income=income;
self._address=address;
#遍历将动态值设置进去
for k,v in kw.items():
setattr(self, k, v);
#私有属性访问修改
def getIncome(self):
return self.__income;
def setIncome(self,income):
self.__income=income;
#类方法,相当于Java中的静态方法
@classmethod
def getDomina(self):
return self.domina;
2、Test.py
from oo.Student import Student
student=Student("STU0001","张三",20,5000,"广西")
print(student.domina)
student._address="广西1"
print(student._address)
#动态赋值
student2=Student("STU0001","张三",20,5000,"广西",aa="ahsh",bb="ssssss")
print(student2.aa)
#访问类属性
print(Student.domina)
'''
当实例属性和类属性重名时,实例属性优先级高
'''
print("student.domina",student.domina)
#这句话实际上是创建了一个实例属性
student.domina="中国"
print("student.domina",student.domina)
#我们可以看到用类名进行访问时,输入的值仍然是Chinese
print("类名进行访问:",Student.domina)
print("student2.domina",student2.domina)
#调用类方法
print("调用类方法:",Student.getDomina())