对象和类
- 一个学生,一张桌子,一个圆都是对象
- 对象是类的一个实例,你可以创建多个对象,创建类的一个实例过程被称为实例化,
- 在Python中对象就是实例,而实例就是对象
定义类
class ClassName:
do something
- class 类的表示与def 一样
- 类名最好使用驼峰式
- 在Python2中类是需要继承基类object的,在Python中默认继承,可写可不写
- 可以将普通代码理解为皮肤,而函数可以理解为内衣,那么类可以理解为外套
In [34]:
# 类必须初始化,是用self,初始化自身.
# 类里面所有的函数中的第一个变量不再是参数,而是一个印记.
# 在类中,如果有参数需要多次使用,那么就可以将其设置为共享参数
class Joker:
def __init__(self,num1,num2):
print('我初始化了')
# 参数共享
self.num1 = num1
self.num2 = num2
print(self.num1,self.num2)
def SUM(self,name):
print(name)
return self.num1 + self.num2
def cheng(self):
return self.num1 * self.num2
In [35]:
huwang = Joker(num1=1,num2=2) # () 代表直接走初始化函数
In [36]:
huwang.SUM(name='JJJ')
Out[36]:
In [33]:
huwang.cheng()
Out[33]:
定义一个不含初始化init的简单类
class ClassName:
joker = “Home”
def func():
print('Worker')
- 尽量少使用
定义一个标准类
- init 代表初始化,可以初始化任何动作
- 此时类调用要使用(),其中()可以理解为开始初始化
- 初始化内的元素,类中其他的函数可以共享
- Circle 和 className_ 的第一个区别有 init 这个函数
- 。。。。 第二个区别,类中的每一个函数都有self的这个“参数”
何为self?
- self 是指向对象本身的参数
- self 只是一个命名规则,其实可以改变的,但是我们约定俗成的是self,也便于理解
- 使用了self就可以访问类中定义的成员
使用类 Cirlcle
类的传参
-
class ClassName:
def __init__(self, para1,para2...): self.para1 = para1 self.para2 = para2
EP:
- A:定义一个类,类中含有两个功能:
- 1、产生3个随机数,获取最大值
- 2、产生3个随机数,获取最小值
- B:定义一个类,(类中函数的嵌套使用)
- 1、第一个函数的功能为:输入一个数字
- 2、第二个函数的功能为:使用第一个函数中得到的数字进行平方处理
- 3、第三个函数的功能为:得到平方处理后的数字 - 原来输入的数字,并打印结果
In [83]:
class Joker2:
"""
Implement Login Class.
"""
def __init__(self):
"""
Initialization class
Arguments:
---------
name: xxx
None.
Returns:
--------
None.
"""
self.account = '123'
self.password = '123'
def Account(self):
"""
Input Account value
Arguments:
---------
None.
Returns:
--------
None.
"""
self.acc = input('请输入账号:>>')
def Password(self):
"""
Input Password value
Arguments:
---------
None.
Returns:
--------
None.
"""
self.passwor = input('请输入密码:>>')
def Check(self):
"""
Check account and password
Note:
----
we need "and" connect.
if account and password is right, then login OK.
else: running Veriy func.
"""
if self.acc == self.account and self.passwor == self.password:
print('Success')
else:
# running Verify !
self.Verify()
def Verify(self):
"""
Verify ....
"""
Verify_Var = 123
print('验证码是:',Verify_Var)
while 1:
User_Verify = eval(input('请输入验证码:>>'))
if User_Verify == Verify_Var:
print('Failed')
break
def Start(self):
"""
Start definelogistics.
"""
self.Account()
self.Password()
self.Check()
In [84]:
# 创建类的一个实例
a = Joker2()
In [82]:
a.Start()
类的继承
-
类的单继承
-
类的多继承
-
继承标识
class SonClass(FatherClass):
def __init__(self): FatherClass.__init__(self)
In [110]:
a = 100
a = 1000
a
Out[110]:
私有变量,不可继承,不可在外部调用,但是可以在内部使用.
In [32]:
class A:
def __init__(self):
self.__a = 'a'
def a_(self):
print('aa')
print(self.__a)
In [35]:
def b():
a()
def a():
print('hahah')
b()
_ _ -- + = / \ { } [] ! ~ !@ # $ % ^ & * ( ) < > ……
私有数据域(私有变量,或者私有函数)
- 在Python中 变量名或者函数名使用双下划线代表私有 __Joker, def __Joker():
- 私有数据域不可继承
- 私有数据域强制继承 __dir__()
EP:
类的其他
- 类的封装
- 实际上就是将一类功能放在一起,方便未来进行管理
- 类的继承(上面已经讲过)
- 类的多态
- 包括装饰器:将放在以后处理高级类中教
- 装饰器的好处:当许多类中的函数需要使用同一个功能的时候,那么使用装饰器就会方便许多
- 装饰器是有固定的写法
- 其包括普通装饰器与带参装饰器
Homewor
UML类图可以不用画
UML 实际上就是一个思维图
- 1
In [14]:
class Rectangle:
def __init__(self,width,heightd):
self.width = width
self.heightd = heightd
def getArea(self):
return self.width * self.heightd
def getPerimeter(self):
return (self.width + self.heightd) * 2
def print(self):
area = self.getArea()
perimeter = self.getPerimeter()
a = self.width
b = self.heightd
print('这个矩形长为:%.2f,宽为:%.2f,面积为:%.2f,周长为:%.2f'%(a,b,area,perimeter))
Rectangle(4,40).print()
Rectangle(3.5,35.7).print()
- 2
In [13]:
class Account:
def __init__(self,id=0 ,balance=100,annuna=0):
self.id=id
self.balance=balance
self.annuna=annuna
print('id:%s'%self.id)
print('金额:%s'%self.balance)
def withdraw(self,qu):
self.shenx=self.balance-qu
def deposit(self,cun):
self.yu=self.shenx+cun
def getMonthlyInterestRate(self):
self.lil=(self.annuna/12)/100
print('月利率:%s'%self.annuna)
def getMonthlyInterest(self):
self.lix=self.yu*self.lil
print('月利息:%s'%self.lix)
re = Account(1122,20000,1.5)
re.withdraw(2500)
re.deposit(3000)
re.getMonthlyInterestRate()
re.getMonthlyInterest()
- 3
In [15]:
class Fun:
def __init__ (self,speed,on,radius,color):
self._speed = speed
self._on = on
self._radius = radius
self._color = color
print('风的速度————%s' %self._speed)
print('状态————%s' %self._on)
print('风扇半径————%s' %self._radius)
print('颜色————%s' %self._color)
self = Fun('最大','on',10,'yellow')
class Fun1:
def __init__ (self,speed1,on1,radius1,color1):
self._speed1 = speed1
self._on1 = on1
self._radius1 = radius1
self._color1 = color1
print('风的速度————%s' %self._speed1)
print('状态————%s' %self._on1)
print('风扇半径————%s' %self._radius1)
print('颜色————%s' %self._color1)
self = Fun1('中等','off',5,'blue')
- 4
In [16]:
import math
class RegularPolygon:
def __init__(self,n,side,x,y):
self.n=n
self.side=side
self.x=x
self.y=y
def getArea(self):
return (self.n*self.side**2)/4*math.tan(3.14/self.n)
def getPerimeter(self):
return self.n*self.side
if __name__ == "__main__":
n,side,x,y=map(float,input('n,side,x,y:>>').split(','))
re=RegularPolygon(n,side,x,y)
print(n,side,x,y,re.getArea(),re.getPerimeter())
- 5
In [19]:
class LinearEquation(object):
def __init__(self,a,b,c,d,e,f):
self.__a=a
self.__b=b
self.__c=c
self.__d=d
self.__e=e
self.__f=f
def set_a(self,a):
self.__a=a
def get_a(self):
return self.__a
def set_b(self,b):
self.__b=b
def get_b(self):
return self.___b
def set_c(self,c):
self.__c=c
def get_c(self):
return self.__c
def set_d(self,d):
self.__d=d
def get_d(self):
return self.__d
def set_e(self,e):
self.__e=e
def get_e(self):
return self.__e
def set_f(self,f):
self.__f=f
def get_f(self):
return self.__f
def isSolvable(self):
if (self.__a*self.__d)-(self.__c*self.__b)!=0:
return True
else:
return print('此方程无解')
def getX(self):
s=(self.__a*self.__d)-(self.__b*self.__c)
x=(self.__e*self.__d)-(self.__b*self.__f)/s
print('X的值为:%.2f'% x)
def getY(self):
s=(self.__a*self.__d)-(self.__b*self.__c)
y=(self.__a*self.__f)-(self.__e*self.__c)/s
print('Y的值为:%.2f'% y)
if __name__=="__main__":
a=int(input('a的值是:'))
b=int(input('b的值是:'))
c=int(input('c的值是:'))
d=int(input('d的值是:'))
e=int(input('e的值是:'))
f=int(input('f的值是:'))
l=LinearEquation(a,b,c,d,e,f)
l.isSolvable()
l.getX()
l.getY()
- 6
In [17]:
class zuobao:
def shur(self):
import math
x1,y1,x2,y2=map(float,input('Enter the endpoints of the first line segment: ').split(','))
x3,y3,x4,y4=map(float,input('Enter the endpoints of the second line segment: ').split(','))
u1=(x4-x3)*(y1-y3)-(x1-x3)*(y4-y3)
v1=(x4-x3)*(y2-y3)-(x2-x3)*(y4-y3)
u=math.fabs(u1)
v=math.fabs(v1)
x5=(x1*v+x2*u)/(u+v)
y5=(y1*v+y2*u)/(u+v)
print('The intersecting point is(%.1f, %.1f)'%(x5,y5))
re=zuobao()
re.shur()
- 7
In [20]:
class LinearEquation(object):
def __init__(self,a,b,c,d,e,f):
self.__a=a
self.__b=b
self.__c=c
self.__d=d
self.__e=e
self.__f=f
def set_a(self,a):
self.__a=a
def get_a(self):
return self.__a
def set_b(self,b):
self.__b=b
def get_b(self):
return self.___b
def set_c(self,c):
self.__c=c
def get_c(self):
return self.__c
def set_d(self,d):
self.__d=d
def get_d(self):
return self.__d
def set_e(self,e):
self.__e=e
def get_e(self):
return self.__e
def set_f(self,f):
self.__f=f
def get_f(self):
return self.__f
def isSolvable(self):
if (self.__a*self.__d)-(self.__c*self.__b)!=0:
return True
else:
return print('此方程无解')
def getX(self):
s=(self.__a*self.__d)-(self.__b*self.__c)
x=(self.__e*self.__d)-(self.__b*self.__f)/s
print('X的值为:%.2f'% x)
def getY(self):
s=(self.__a*self.__d)-(self.__b*self.__c)
y=(self.__a*self.__f)-(self.__e*self.__c)/s
print('Y的值为:%.2f'% y)
if __name__=="__main__":
a=int(input('a的值是:'))
b=int(input('b的值是:'))
c=int(input('c的值是:'))
d=int(input('d的值是:'))
e=int(input('e的值是:'))
f=int(input('f的值是:'))
l=LinearEquation(a,b,c,d,e,f)
l.isSolvable()
l.getX()
l.getY()