python面向对象基础
- 类定义
#定义一个学生类
class student:
- 类变量
class student:
#定义一个类变量count,该变量属于类,属于每一个实例,同比与java中static修饰的变量
count=0
- 实例变量
java中对于变量有private、public、protected、default这四种修饰符类型,但是python中没有,python是通过变量名去控制的,Python本身没有任何机制来阻止你直接访问私有变量,他的这些权限控制机制都是假的。
从内部机制原理讲,外部不能直接访问__name是因为Python解释器把__name这个变量名改写成了_student__name,但是,你仍然可以通过a._student__name访问,但是不建议这么做
class student:
#定义一个类变量count,该变量属于类,属于每一个实例,同比与java中static修饰的变量
count=0
def __init__(self,name,age,stuno,score):
self._name = name #单个下划线的,是类的外部可以访问,但是一般请视为私有
self.age=age #相当于java中的public
self.__stuno = stuno #两个下划线相当于Java中的privte
self.__score__=score #前后都有两个下划线 这是具有特殊意义的变量
print("这是类的构造方法")
- 类方法
#定义一个学生类
class student:
#定义一个类变量count,该变量属于类,属于每一个实例,同比与java中static修饰的变量
count=0
def __init__(self,name,age,stuno,score):
self._name = name #单个下划线的,是类的外部可以访问,但是一般请视为私有
self.age=age #相当于java中的public
self.__stuno = stuno #两个下划线相当于Java中的privte
self.__score__=score #前后都有两个下划线 这是具有特殊意义的变量
print("这是类的构造方法")
#定义普通方法
def readbook():
print("学生读书")
#相当于private
def __write():
print("学生写作业")
#一般视为私有,同变量规则
def _play():
print("学生玩耍")
#前后都有两个下划线 这是具有特殊意义的方法
def __test__():
print("学生考试")
def getStuno(self):
return self.__getStuno
def setScore(self,score):
self.__score__ = score
-
类对象
stu1 = student("张三",23,"1000",100) stu2 = student("李四",25,"1001",99) stu3 = student() age = stu1.age print(age) age = stu2.age print(age) stu2.readbook() stu1.setScore(99.5) stuno1 = stu1.getStuno() print(stuno1)
-
面向对象几大特性
-
继承
class Peploe:
a=1
def __init__(self,name,age):
self.name = name
self.age = age
def walk():
print("散步")
def printfa():
print(a)
class Teacher(Peploe):
a=2
def printa():
print(a)
tea = Teacher()
tea.printa()
tea.printfa()
#打印结果:
#2
#2
Java继承实例化过程:
- 调用父类的静态代码
- 调用子类的静态代码
- 执行父类的成员代码
- 执行父类的构造函数–父类实例化完成
- 执行子类成员代码
- 执行子类构造函数–子类实例化完成
python中继承时的实例化过程:
- 执行父类的静态代码
- 执行子类的惊天代码
- 执行子类的__new__方法
- 在子类的__new__方法中执行父类的__new__方法
- 调用父类的__init__方法
- 调用子类的__init__方法
Java 对象在调用父类中方法时,该方法调用的方法会优先使用子类的方法,调用的成员变量会优先调用父类的变量。
Python 对象在调用父类中方法时,调用的方法和变量都优先调用子类的方法和变量。 - 多继承
class Father:
a=1
def __init__(self):
print("父类无参")
def printfa(self):
print(self.a)
def speak(self):
print("Father类的speak")
class Son:
a=2
def __init__(self):
print("子类无参")
def printa(self):
print(self.a);
def speak(self):
print("Son类的speak")
class Sson(Son,Father):
a=2
def __init__(self):
print("子类无参")
def printa(self):
print(self.a);
sson = Sson()
sson.speak()
#结果:Son类的speak
#按继承的顺序调用
- 方法重写
略