python3类与对象汽车_Python3 类的定义和对象实例

面向对象设计思想最重要的概念就是类(Class)和实例(Instance),类是抽象的模板。

实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

类定义

在Python中,定义类是通过class关键字,语法格式如下:

class ClassName:

class关键字后面紧接着是类名,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。

通常,如果没有合适的继承类,就使用object类,所有类都继承object类。

classLesson(object):

#对象的构造方法(初始化)方法def__init__(self, name, score):

self.name = name

self.score = score

defprint_score(self):

print('%s: %s'% (self.name, self.score))

#实例化对象lesson1 = Lesson('python', 90)

lesson2 = Lesson('java', 99)

print(lesson1) # <__main__.lesson object at>print(lesson2) # <__main__.lesson object at>print(Lesson) # lesson2.score = 91#对lesson2对象的属性重新赋值lesson2.print_score()

7aeadeed807af1f213383a5b2fc51b7b.png

对象实例

定义好了类,就能根据类创建出该类的实例对象,创建实例是通过类名+()实现的。

上面的例子中,变量lesson1指向的是一个Lesson的实例,后面的0x000001B39B1CC501是变量的内存地址,每个实例对象的地址都不一样。

给类实例化一个对象后,就能给这个实例变量绑定属性,如给实例lesson2的score属性重新赋值。

我们从外部看Lesson类,就知道,创建该类实例需要提供name和score的值,如何打印这2个值,在Lesson类的内部定义了。

上面这个类的这些数据和处理逻辑被“封装”起来了,调用很容易,且不用知道类内部实现的细节。

封装的另一个好处是很容易给Lesson类增加新的方法。

类的初始化

特殊方法“__init__”:前后分别有两个下划线

类相当于一个模板,我们在创建实例的时候,能初始化对象里的属性。通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去。

注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就能初始化self的各种属性,因为self就指向创建的实例本身。

这里也能使用 this,但是最好还是按照约定是用 self。

定义了__init__方法,在创建实例的时候,就必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去。

与普通的函数相比,在类中定义的函数有一点不同,就是第一个参数永远是实例变量self,且在调用时,不用传递该参数。

除此之外,类的方法和普通函数没有区别,我们仍然能用默认参数、可变参数、关键字参数和命名关键字参数等。

特殊方法“__new__”

当实例化一个对象的时候,”__new__”方法首先被调用,然后是”__init__”方法。

”__new__”方法的通用格式:

def__new__(cls,*args,**kwargs):

# func_suite

returnobj

“__new__” 方法是在类实例化对象时第一个调用的方法,将返回实例对象

“__new__” 方法是类的静态方法(第一个参数为cls),即使没有被加上静态方法装饰器

第一个参数cls是当前正在实例化的类,如果要得到当前类的实例,应当在当前类中的 “__new__” 方法语句中调用当前类的父类的” __new__” 方法。

”__new__”和”__init__”的区别与联系:

“__new__”方法在Python中是真正的类构造方法(创建并返回实例),通过这个方法产生一个”cls”对应的实例对象,所以”__new__”方法一定要有返回。

”__init__”方法,是一个初始化的方法,”self”代表由类产生出来的实例对象,”__init__”将对这个对象进行相应的初始化操作。

__new__是一个静态方法,而__init__是一个实例方法。

__new__方法会返回一个创建的实例,而__init__什么都不返回。

只有在__new__返回一个cls的实例时后面的__init__才能被调用。

当创建一个新实例时调用__new__,初始化一个实例时用__init__。

classUser:

defprt(self):

print(self) # <__main__.user object at>print(self.__class__) # t = User()

t.prt()

从执行结果看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。

self 不是 python 关键字,我们把他换成其它字符串也能正常执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值