zoukankan      html  css  js  c++  java
  • 创建和使用类

    创建Dog类

    class Dog(): #定义了一个名为Dog的类,首字母大写名称指的是类
    	'''一次模拟小狗的简单尝试'''
    	def __init__ (self,name,age): #开头和结尾各有两个下划线是种约定
    		'''初始化属性name和age'''
    		#形参self必不可少,必须在其他形参之前。创建实例时,将自动传入实参self
    		#每当根据Dog类1创建实例时,只需给后两个形参(name,age)提供值。
    		self.name=name #获取存储在形参name中的值,并将其存储到变量name中。
    		self.age=age
    	def sit(self):
    		'''模拟小狗被命令时蹲下'''
    		print(self.name.title() + ' is now sitting.')
    	def roll_over(self):
    		'''模拟小狗被命令时打滚'''
    		print(self.name.title() + ' rolled over!')
    

    根据类创建实例

    class Dog():
        --snip--
    
    my_dog= Dog('willie',6) #小写的名称my_dog指的事根据类创建的实例。
    #my_dog.name,在Dog类中引用这个属性时,使用的是self.name 
    print("My dog's name is " + my_dog.name.title() + '.')
    print("My dog is " + str(my_dog.age) +' years old.') 
    
    调用方法
    my_dog.sit()
    my_dog.roll_over()
    

    使用类和实例

    Car类

    class Car():
    	#一次模拟汽车的简单尝试
    	def __init__(self,make,model,year):
    		#初始化描述汽车的属性
    		self.make=make
    		self.model=model
    		self.year=year
    	def get_descriptive_name(self):
    		#返回整洁的描述性信息
    		long_name=str(self.year) + ' ' +self.make + ' ' + self.model
    		return long_name.title()
    my_new_car=Car('audi','a4','2016')
    print(my_new_car.get_descriptive_name())
    

    给属性指定默认值

    设置默认值,在方法__init__()内指定这种初始值是可行的,无需包含为它提供初始值的形参
    class Car():
    	def __init__(self,make,model,year):
    		self.make=make
    		self.model=model
    		self.year=year
    		self.odometer_reading=0
    	def get_descriptive_name(self):
                        --snip--
    	def read_odometer(self):
    		print('This car has '+str(self.odometer_reading)+' miles on it.')
    my_new_car=Car('audi','a4','2016')
    print(my_new_car.get_descriptive_name())	
    my_new_car.read_odometer()
    

    修改属性的值

    #直接修改
    my_new_car=Car('audi','a4','2016')
    print(my_new_car.get_descriptive_name())
    my_new_car.odometer_reading=23
    my_new_car.read_odometer()
    #通过方法修改属性的值
    def update_odometer(self,mileage):
    将里程表读数设置为指定的值
    self.odometer_reading=mileage
                --snip--
    my_new_car.update_odometer(23)
    my_new_car.read_odometer()
    

    继承

    如果编写的类是另一个现成类的特殊版本,可使用继承

    子类的方法__init__()

    #父类必须包含在当前文件中,且位于子类的前面。
    class ElectricCar(Car):#定义子类时,括号内指定父类的名称
    	def __init__(self,make,model,year):
    	#初始化父类的属性
    		super().__init__(make,model,year)
                    #super()是个特殊函数,帮助父类和子类关联起来,父类也成为超类(superclass)
    my_tesla=ElectricCar('tesla',"model s'",2016)
    print(my_tesla.get_descriptive_name())
    

    重写父类的方法

    可在子类中定义一个这样的方法,即它与重写的父类方法同名。
    这样python将不会考虑这个父类方法

    class ElectricCar(Car):
    	--snip--
    	def fill_gas_tank(self):
    		print("This car doesn't need a gas tank!")
    对电动汽车调用方法fill_gas_tank(),python将忽略Car类中的方法,转而运行上述代码
    

    用实例用作属性

    class Car():
    	--snip--
    
    class Battery():
    #一次模拟电动汽车电瓶的简单尝试
    	def __init__(self,battery_size=85):
            #初始化电瓶的属性
    		self.battery_size=battery_size
    	def describe_battery(self):
            #打印一条描述电瓶容量的消息
    		print("This car has a " + str(self.battery_size) + "-kwh battery.")
    	def get_range(self):
            #打印一条消息,指出电瓶的续航里程
    		if self.battery_size==70:
    			range=240
    		elif self.battery_size==85:
    			range=270
    		message="This car can go approximately " + str(range)
    		message+=" miles on a full charge."
    		print(message)
    
    class ElectricCar(Car):
    	#电动汽车的独特之处
    	def __init__(self,make,model,year):
    	#初始化父类的属性
    		super().__init__(make,model,year)
    		self.battery=Battery()
    
    my_tesla=ElectricCar('tesla',"model s'",2016)
    print(my_tesla.get_descriptive_name())
    my_tesla.battery.describe_battery()
    #这行代码让python在实例my_tesla中查找属性battery,并对存储在该属性中的battery实例调用方法describe_battery()
    my_tesla.battery.get_range()
    

    导入类

    导入单个类

    car.py

    class car():
    --snip--
    

    my_car.py

    from car import Car
    --snip--
    

    在一个模块中存储多个类

    car.py

    class Car():
    --snip--
    class Battery():
    --snip--
    class ElectricCar(Car):
    --snip--
    

    my_electryc_car.py

    from car import ElectricCar
    --snip--
    

    从一个模块中导入多个类

    my_cars.py

    from car import Car,ElectricCar
    #导入指定类
    from car import *
    #导入模块中所有类
    

    导入整个模块

    my_cars.py

    import car
    
  • 相关阅读:
    oh forever love~
    PostgreSQL数据库忘记密码的解决方案
    vue
    无法启动postgresql的错误
    Goaccess解析nginx日志备忘
    pg备份恢复与设置编码
    django+uwsgi+nginx+postgresql备忘
    Git 直接推送到生产服务器
    为了性能, 数据操作尽量在数据库层面进行
    简单理解call_user_func和call_user_func_array两个函数
  • 原文地址:https://www.cnblogs.com/rener0424/p/10166471.html
Copyright © 2011-2022 走看看