"""
属性的使用
- 访问器/修改器/删除器
- 使用__slots__对属性加以限制
"""
class Car :
__slots__ = ( '_brand' , '_max_speed' )
def __init__ ( self, brand, max_speed) :
self. _brand = brand
self. _max_speed = max_speed
@property
def brands ( self) :
return self. _brand
@brands. setter
def brands ( self, brand) :
self. _brand = brand
@brands. deleter
def brands ( self) :
del self. _brand
@property
def max_s ( self) :
return self. _max_speed
@max_s. setter
def max_s ( self, max_speed) :
if max_speed > 0 :
self. _max_speed = max_speed
else :
raise ValueError( 'Invaild max speed for car' )
@max_s. deleter
def max_s ( self) :
del self. _max_speed
def __str__ ( self) :
return 'the max speed of %s is %s' % ( self. _brand, self. _max_speed)
car = Car( 'benz' , 150 )
print ( car)
del car. brands
del car. max_s
"""
属性的使用
- 使用已有方法定义访问器/修改器/删除器
"""
class Car ( object ) :
def __init__ ( self, brand, max_speed) :
self. set_brand( brand)
self. set_max_speed( max_speed)
def get_brand ( self) :
return self. _brand
def set_brand ( self, brand) :
self. _brand = brand
def del_brand ( self) :
del self. _brand
def get_max_speed ( self) :
return self. _max_speed
def set_max_speed ( self, max_speed) :
if max_speed < 0 :
raise ValueError( 'Invalid max speed for car' )
self. _max_speed = max_speed
def __str__ ( self) :
return 'Car: [品牌=%s, 最高时速=%d]' % ( self. _brand, self. _max_speed)
brands = property ( get_brand, set_brand, del_brand, '汽车品牌' )
max_s = property ( get_max_speed, set_max_speed)
car = Car( 'QQ' , 120 )
car. brands
car. brands = "Benz"
del car. brands
print ( Car. brands. __doc__)
car. max_s = 320
import time as t
import os
class Count ( ) :
def __init__ ( self, hour, minite, second) :
self. _hour = hour
self. _minute = minite
self. _second = second
@classmethod
def inits ( cls) :
timetuple = t. localtime( )
return cls( timetuple[ 3 ] , timetuple[ 4 ] , timetuple[ 5 ] )
def timerun ( self) :
self. _second+= 1
if self. _second== 60 :
self. _second= 0
self. _minute+= 1
if self. _minute== 60 :
self. _minute= 0
self. _hour+= 1
def timeshow ( self) :
print ( '%d -- %d -- %d' % ( self. _hour, self. _minute, self. _second) )
if __name__ == '__main__' :
count= Count. inits( )
while True :
os. system( 'cls' )
count. timeshow( )
t. sleep( 1 )
count. timerun( )
class Compare1 :
def __init__ ( self, x) :
self. x= x
def __gt__ ( self, other) :
return abs ( self. x) > abs ( other. x)
def __lt__ ( self, other) :
return abs ( self. x) < abs ( other. x)
com1= Compare1( - 5 )
com2= Compare1( 4 )
print ( com1 > com2)
print ( com1 < com2)
class A ( object ) :
def foo ( self) :
print ( 'foo of A' )
class B ( A) :
pass
class C ( A) :
def foo ( self) :
print ( 'foo fo C' )
class D ( B, C) :
pass
class E ( D) :
def foo ( self) :
print ( 'foo in E' )
super ( ) . foo( )
super ( B, self) . foo( )
super ( C, self) . foo( )
if __name__ == '__main__' :
d = D( )
d. foo( )
print ( '===========' )
e = E( )
e. foo( )
'''
foo fo C
===========
foo in E
foo fo C
foo fo C
foo of A
'''
from abc import ABCMeta, abstractmethod
class Employee ( metaclass= ABCMeta) :
def __init__ ( self, name) :
self. _name= name
@property
def name ( self) :
return self. _name
@abstractmethod
def get_salary ( self) :
pass
class Manager ( Employee) :
def __init__ ( self, name) :
super ( ) . __init__( name)
def get_salary ( self) :
return 100000
class Worker ( Employee) :
def __init__ ( self, name) :
super ( ) . __init__( name)
def set_working_hours ( self, hours) :
self. hours= hours
def get_salary ( self) :
return 1000 * self. hours
hr_lists= [ Manager( '奥巴马' ) , Worker( 'anger translator' ) ]
for ppl in hr_lists:
if isinstance ( ppl, Manager) :
print ( ppl. get_salary( ) )
else :
hourss= float ( input ( 'enter the hours:' ) )
ppl. set_working_hours( hourss)
print ( ppl. get_salary( ) )
class Cal :
def __init__ ( self, x, y, z) :
self. _x= x
self. _y= y
self. _z= z
@staticmethod
def decide ( x, y, z) :
return ( x> 0 and y> 0 and z> 0 )
def mu ( self) :
self. _x+= 1
self. _y+= 1
self. _z+= 1
return self
def adds ( self) :
self. _x*= 2
self. _y*= 2
self. _z*= 2
return self
def __str__ ( self) :
return '结果为:%f %f %f' % ( self. _x, self. _y, self. _z)
x, y, z= map ( float , input ( '请输入三个数:' ) . split( ) )
if Cal. decide( x, y, z) :
cal= Cal( x, y, z)
cal. mu( ) . adds( ) . mu( )
print ( cal)
'''
请输入三个数:5 4 6
结果为:13.000000 11.000000 15.000000
'''