类
定义:
拥有共同属性和方法的一类事物,比如 人类、动物类等
对象:
具体的某一个事物。 类下面的调用者就是对象,比如说动物一类,它下面的对象有猪、狗等
在编程的世界里是先有类后有对象
类是实例的抽象,父类是子类的抽象。而对象是类中方法或属性实例出来的
创建类和对象 :
对象 = 类名 (这里写上你对应的参数值,self不用传值)
调用方法:
对象.函数名()
类的属性:
类名.类属性
类名.类方法(不能调用 )
对象的属性:
对象名.对象属性 对象名.类属性
对象名.方法()(调用方法,也叫做调用 动态属性)
面向对象之间的交互:
在多个面向对象之间互相的调用
计算面积和周长
import math
class Round:
def __init__(self,radius):
self.radius = radius
def area(self):
print('round is area%s'%(math.pi*self.radius**2))
def primeter(self):
print('round is primeter%s'%(math.pi*self.radius*2))
round = Round(10)
round.area()
round.primeter()
类的命名空间
对于类的静态属性:(属于类内部的命名空间)
类.属性: (调用解释类的属性)
对象.属性: 就是先从自己的命名空间寻找如果有应用自己的,没有就到类里去寻找
class A:
ret = 'fang'
a = A()
print(A.ret)
print(a.ret)
a.ret = 'fangjie'
print(a.ret)
print(A.ret)
类的动态属性(方法):(属于类内部的命名空间)
这个方法本身就存在于类的空间,根本不会存在对象 的内存中
如果用对象调用类的方法,需要在类的内存中产生一个地址 来对应类中的方法
class A:
def func(self):
print(111)
a = A()
a.func()
a.func = 888
print(a.func)
a.func() # 这个打印的是 666() int 是不能被调用的
对象的属性:是通过init 方法初始化得来的
(类内和self发生联系类外和对象名发生联系)
对象的属性只存在于对象的命名空间
只能被对象来调用和修改,如果类来调用就会报错
class A:
pass
a = A()
a.name = 'alex'
print(a.name)
print(A.name) #没有属性name 会报错
面向对象的组合:
一个类的对象是另一个类的属性 。
组合表达是什么和什么的关系
组合的好处: 增强了代码的重用性
import math
class Round:
def __init__(self,radius):
self.radius = radius
def area(self):
return math.pi*self.radius**2
def primeter(self):
return math.pi*self.radius*2
class BSRound:
def __init__(self,bradius,sradius):
self.bradius = Round(bradius)
self.sradius = Round(sradius)
def area(self):
return self.bradius.area() - self.sradius.area()
def primeter(self):
return self.bradius.primeter() - self.sradius.primeter()
round = BSRound(10,5)
print(round.area())
print(round.primeter())
class Course:
def __init__(self,course_name,period,price,teacher):
self.course_name = course_name
self.period = period
self.price = price
self.teacher = teacher
class Student:
def __init__(self,name,sex,age,course):
self.name = name
self.sex = sex
self.age = age
self.course = course
course = Course('Python',8,20000,'景')
student = Student('田振江','男',27,course)
print(student.course.period)
print(student.course.teacher)
print(student.course.course_name)