面向对象
面向对象
1.类、对象
-
类:用来描述一类事物,具有相同的属性和方法
-
内置类:int、float、str、dict、list、tuple、set
-
类名()会自动调用类中的__init__方法
-
通过对象名.__dict__就可以查看这个对象的属性和值
-
修改字典、列表里的值或者对象的某一个属性,都不会影响对象、字典、列表所在的内存空间
-
实例化的步骤
- 类名()后:开辟一块内存空间
- 调用__init__把空间的内存地址作为self参数传递到函数内部
- 所有的这一个对象需要使用的属性都需要和self关联起来
- 执行完init中的逻辑之后,self变量会自动的被返回到调用处(发生实例化的地方)
-
-
python中一切皆对象、对象的类型就是类
class User: def __init__(self, username, password): self.username = username self.password = password def login(self): if self.username == "JACK" and self.password == "JACK123": print("登陆成功") else: print("登陆失败") user = User("JACK","JACK123") user.login() print(user.__dict__)
2.类的成员和命名空间
-
静态变量/属性、方法都存储在类的命名空间里
-
类指针指向存储了类所在的内存空间
-
对象中的变量只属于对象本身,每个对象有属于自己的空间来存储对象的变量
class A: country = "中国" def __init__(self,name,age,country): self.name = name self.age = age self.country = country def func1(self): print(self) print(A.__dict__) print(A.func1) a = A("zevin", "18", "China") print(a.country) -
如果一个变量是所有对象共享的值,那么这个变量应该被定义为静态变量,所有和静态变量相关的增删改查都应该使用类名来处理
#统计类的实例化次数 class Count: count = 0 def __init__(self): Count.count += 1 print(Count.count) a = Count() b = Count()
3.组合
-
组合:一个类的对象是另外一个类的对象的属性
''' 学生类:姓名、年龄、班级、学号 班级类:班级名字、开班时间、老师 功能:方便代码的修改 ''' class Student: def __init__(self, name, age, clas, sno): self.name = name self.age = age self.clas = clas self.sno = sno class Clas: def __init__(self, cname, ctime, cteacher): self.cname = cname self.ctime = ctime self.cteacher = cteacher py1 = Clas("python1期", "2019-2-2", 'Pork') py2 = Clas("python2期", "2019-3-3", "David") alvin = Student("alvin", "18", py1, "19020201") alisa = Student("alisa", "19", py2, "19030301") print(alvin.clas, py1) print(alvin.clas.cteacher)
4.继承
-
子类有父类的方法,但是要调用父类的:父类名.方法名(self,参数)
-
练习
class Foo: def __init__(self):#在每一个self调用func时,只看self是谁 self.func() def func(self): print('in foo') class Son(Foo): def func(self): print('in son') Son() #in son

浙公网安备 33010602011771号