Python 创建和使用类

python创建和使用类的方法如下

# class Dog():
#     def __init__(self,name,age):
#         self.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!")
#
# my_dog=Dog("willie",6)
# #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()

1、方法__init__() 是一个特殊的方法,包含三个形参:self 、name 和age 。在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。因为Python调用这个__init__() 方法来创建Dog 实例时,将自动传入实参self 。每个与类相关联的方法调用都自动传递实参self ,它是一个指向实例本身 的引用,让实例能够访问类中的属性和方法。我的理解self这个形参是必不可少的,因为在类中定义方法的时候一定会有self这个形参。然后看下面这段代码

# class Dog():
#     def __init__(self,name,age):
#         self.name=name
#         self.age=age

我理解是name和age都是类Dog中的属性,这是对类中的属性进行初始化,因为类中的每个属性必须有初始值。同时记住以self 为前缀的变量都可供类中的所有方法使用,上面代码中的函数定义,函数只有一个self参数,但是函数体中可以使用 age,name这些属性。

在根据类创建实例的时候,比如

 my_dog = Dog('willie', 6) 

此时的self这个参数会默认自动传递,因此我们要传递的只是后面的两个参数。实例化结束后,我们可以通过Dog的实例来使用类中定义的函数或者直接访问类中有的属性。

__init__方法是对类的属性进行初始化,因此在该方法中要传递属性的初始值作为参数,当然你也可以直接对某个属性直接进行初始化,这样的话就不用在
__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):
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
        return long_name.title()
    def read_odometer(self):
        print("This car has "+str(self.odometer_reading)+" niles on it.")

这里的self.odometer_reading=0直接初始化为0,因此不必在 _init_方法中为该属性提供形参作为默认的初始值。

还有,如果每次需要改变属性的值时都要在实例化时作更改,岂不是很麻烦?

所有有以下几种方式修改属性值。

1. 直接修改属性的值比如上面的odometer_reading = 0,可以这样修改  my_new_car.odometer_reading = 23

2.通过方法来修改

 def update_odometer(self, mileage):         
       """将里程表读数设置为指定的值"""              
       self.odometer_reading = mileage     

在类中定义一个方法专门来修修改属性的,如果需要更变属性的时候,直接调用该方法即可。

不过那些属性初始值是在_init_方法中的参数的,并不能通过以上的方式来修改(只能在初始化实例的时候传参修改?)

能操作的只是那些个没在在类的 _init_函数参数中有初始值的属性。也就是上面的  self.odometer_reading=0  这个属性是能被修改的,其他的 model,make,year 这这些属性只能在实例化类的时候在参数中修改

应该只 这样子的

  

 
原文地址:https://www.cnblogs.com/Guhongying/p/10011185.html