发布于2020-02-26 11:48 阅读(1304) 评论(0) 点赞(26) 收藏(1)
封装
组装:将一组数据结构和操作这些数据结构的方法组装到一起
隐藏数据:对外只暴露一些接口,通过接口访问对象。就像开车一样,你不知道车的组成原理,但是知道车辆驱动的方式就行了
继承
多复用:子类能够继承父类或以上的类的方法,这样来自继承类的方法就可以不用自己再编写代码。使代码更加精简。
多继承少修改:能够继承大部分特性,再通过重写的方式来增加一些特色
多态
不同的子类继承父类的同一方法,然后通过重写或者覆盖的方式来增加子类的特色,从而实现多态
1.使用关键字class
2.类名建议使用大驼峰方式,本质上是个标识符
3.类定义完成后,会生成一个类对象,绑定到了类名上
class School:
"""这是个学校类"""
a = 123
x = 'abc'
def __init__(self, name, level):
self.name = name
self.level = level
def show_propertites(self):
return 'name is {}, level is {}'.format(self.name, self.level)
school1 = School('school_a', 'grade_one') #类的实例化
print(school1.show_propertites()) #调用类方法,会有绑定效果
print(school1.a) #访问类属性,公共属性
print(school1.__class__.a) #同上
print(school1.__class__.__dict__['a']) #通过类的字典来访问类属性
a
和x
是类变量,也是类属性。类中的方法,变量,还有__doc_-都是类的属性,可以通过类或类字典来访问
1.__init__方法用来进行实例的初始化,第一个位置参数必须是self,也可以是其他能标识符,不过self是默认的标识符
2.init(self, name, grade),括号中包含的是实例的属性,在初始化时必须附带实参,除非这些形参有了默认值
注意
__init__()方法不能有返回值,或者说是返回None
方法绑定
实例在调用类方法的时候,会将实例名以第一位置参数传入,即类方法会代替类方法中的self形参
属性
1.类属性是公有的属性,实例可以通过类、类字典来访问类属性。或者直接通过实例来调用属性,此方式会递归向上去查找
2.实例变量是实例私有的,其他实例和类都不能访问实例的属性
class Person:
@classmethod
def class_method(cls):
print('类方法')
print("{0}'s name is {0.__name__}".format(cls))
tom = Person()
Person.class_method()
Person().class_method()
其实通过类访问类方法或者实例访问类方法,效果都是一样的
类方法
1.在类定义中,使用classmethod修饰的方法就叫类方法
2.类方法至少需要一个参数,且第一参数必须是cls
3.通过cls可以直接操作类的属性
静态方法
class Person:
HEIGHT = 180
@staticmethod
def static_method():
print('静态方法')
print(Person.HEIGHT)
1.使用staticmethod修饰
2.调用时,不会隐式传入参数
3.通过类和实例都可以调用静态方法
私有成员(Private)
class Person:
def __init__(self, name, age=18):
self.__name = name
self.__age = age
def __showage(self):
print(self.__age)
tom = Person('tom')
print(tom.__name) #报错
print(tom.__showage()) #报错
以双下划线开头的属性不能直接访问,因为python会隐式地改名,因此直接访问时会报错(没有这个属性),对于这些属性会在前面加上_Person这个前缀,比如,__name属性会变成_Person__name),因此若要强制访问这些属性,需要访问改名后的名称,不过不建议这样访问,因为他们是保护成员,原则上在类外部是不能直接访问的,这样就失去了封装的意义。
保护成员
class Person:
def __init__(self, name, age=18):
self._name = name
self._age = age
def _showage(self):
print(self._age)
print(Person.__dict__)
tom = Person('Tom')
print(tom.__dict__)
tom._showage() # 可以访问
print(tom._name, tom._age) # 可以访问
保护成员不是python定义的,是程序员之间约定俗成的法则,意义是让外部不要轻易访问这些成员,更不能去修改它们,这样就失去了类的初衷
作者:嘴巴嘟嘟
链接:https://www.pythonheidong.com/blog/article/234059/2f34ab360c8e836464a2/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!