
有意义的面向对象的代码
类 是面向对象最核心的观念
类、对象
实例化
类最基本的作用:封装
一定要用self,引用 self.
类只负责定义,不会去运行
类和对象。
数据成员
构造函数可以让模板生成不同的对象
类是现实世界或思维世界中的实体在计算机中的反馈
它将数据以及这些数据上的操作封装在一起
类 被 实例化后 就成了一个具体的对象
类就像是一个模板,通过类 就可以产生很多对象。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#比如这段代码为 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')
1 | from 1.py import Human |
定义一个类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20class 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赋参
详解1
2
3
4
5
6
7
8
9
10
11
12# 模块
c = 50
def add(x, y):
c= x+y
print(c)
add(1,2) #3 函数中局部变量的值
print(c) #50 全局变量的值
# 两个print(c)的区别
# 局部变量不会改变全局变量的值
类和模块要区别对待
‘类变量’ 和 类 关联在一起的
######’实例变量’ 和 对象 关联在一起的1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class 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) #hello
1 | class Student(): |
类方法主要操作和类相关的变量
用类调用类方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class 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()
对象调用类方法(python可用但最好不要用)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class 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()
静态方法1
2
3
4
5
6
7
8
9
10
11
12
13class 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')
静态方法 能用的地方 基本可以用 类方法替代(最好用类方法)
当和类和对象没多大关系的时候,可以使用静态方法
静态方法和类方法 均不能访问 实例变量
类中赋值没有意义的。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class 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中私有只是改了一个名字