面向对象
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
#比如这段代码为 1.py
class Human():
sum = 0 #在class内部定义变量 类变量 (和类相关联在一起的)
def __init__(self,name,age):#构造函数 ,
#文件夹中得含有 _init_.py 模块才会被认为是一个包。包 导入时会优先运行.
#初始化对象属性
self.name = name # 定义实例时需要self,调用实例不需要给self赋参
self.age = age #定义实例变量,实例变量只和对象相关 self.
#return NONE (构造函数只能返回NONE) (补充知识)
def get_name(self):
print(self.name)
def do_homework(self):
print('This is a parent method')from 1.py import Human
class Student(Human): #Human是Student的父类,Student是Human的子类
def __init__(self,school,name,age):
self.school = school
super(Student,self).__init__(name,age) #建议以此方式调用父类
#super 不仅仅可用于构造函数,也可以用于普通的实例方法
# Human.__init__(self,name,age) #子类里调用父类构造函数
#self 用类调用实例方法没意义,所以加self
# self.age = age
def do_homework(self): #子类和父类同名的话,不会报错,先使用子类
#super(Student,self).do_homework() #This is a parent method
print('English homework')
student1 = Student('jinan university','wei',18) #实例化
student1.do_homework() #English homework
print(student1.name) #wei
print(student1.age)#18
#继承 单继承 多继承class Student():
name = '' #在class内部定义变量 类变量 (和类相关联在一起的)
age = 0
#行为 与 特征
def __init__(self,age,name): #构造函数(实例化后,会自动调用)
#初始化对象属性
self.neme = name
self.age = age #定义实例变量,实例变量只和对象相关 self.
# #return NONE (构造函数只能返回NONE) (补充知识)
def print_files(self): #在class内部定义函数
print('name:'+ self.name)
print('age:'+ str(self.age))
student = Student() #类的实例化
student.print_files() #类下面方法的调用
# 建议 类的实例化以及类下面方法的调用 与类的定义放在不同的模块。
# 定义实例时需要self,调用实例不需要给self赋参# 模块
c = 50
def add(x, y):
c= x+y
print(c)
add(1,2) #3 函数中局部变量的值
print(c) #50 全局变量的值
# 两个print(c)的区别
# 局部变量不会改变全局变量的值class Student():
sum=0
name = 'weilai'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
def marking(self,sorce): #内部访问
if sorce < 0: #建议通过方法 对 类变量赋值
# sorce =0
return '不能给同学打负分'
self.__sorce = sorce
print(self.name + '同学本次的考试分数为:' + str(self.__sorce))
return 'hello'
result = student1.marking(80)#wang同学本次的考试分数为:80
print(result) #helloclass Student():
sum=0 # 类变量 和类相关
name = 'weilai' #在class内部定义变量 类变量
age = 0 # 类中赋值没有意义的。 #21 ,22 其实是与对象相关,不应出现在这
# 行为 与 特征
def __init__(self,name,age): #构造函数(实例化后,会自动调用),是一个特殊的方法
#主要是被用来初始化对象属性
self.name = name #实例方法操控实例变量
self.age = age
print(self.__class__.sum)
print(Student.sum)
self.__class__.sum +=1 #实例方法访问类变量中的sum
print(Student.sum)
student1 = Student('wang',18)
student2 = Student('li',19)class Student():
sum=0
name = 'weilai'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod #让其成为类方法
def plus_sum(cls): #sum每运行一次就+1
cls.sum+=1
print(cls.sum)
student1 = Student('wang',18)
Student.plus_sum() #用类调用类方法
student2 = Student('li',19)
Student.plus_sum()class Student():
sum=0
name = 'weilai'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod #让其成为类方法
def plus_sum(cls): #sum每运行一次就+1
cls.sum+=1
print(cls.sum)
student1 = Student('wang',18)
student1.plus_sum() #用对象调用类方法
student2 = Student('li',19)
student2.plus_sum()class Student():
sum=0
name = 'weilai'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
@staticmethod #静态方法
def add(x):
print(Student.sum)
print('this is a static method')class Student():
name = 'weilai'
age = 0
def __init__(self,name,age):
name = name
age = age
student1 = Student('wang',18)
print(student1.name) #weilai
print(student1.age) #0
print(student1.__dict__) #{} #__dict__显示student1下所有的变量,即没有变量
# python 会先在 实列变量上寻找 ,寻找不到就会到类变量里寻找,(然后再到父类里寻找)
# 所以即使student1为空,也显示了类变量下的值
#公开的 public 私有的(外部不能访问)private 在方法或变量前加__ 表示私有的
#__init__ 构造函数是python特有的,可以从外部访问
#print(student1._Student__sorce) 表明python中私有只是改了一个名字