Python类的写法是怎样的,有什么规范
Admin 2022-08-10 群英技术资讯 315 次浏览
python是一种面向对象的语言,利用类的抽象可以大大提高代码的复用和结构,减少重复造轮子的过程,也让代码变得更加清晰易懂、便于维护。
python中的类提供了一系列数据和方法的组合,类是python的一种对象,可以由它构建出新的实例。实例包含了类所具有的属性和类中声明的方法。首先来看一个基本类的写法:
class Dog(object): """This is a dog class as example""" def __init__(self,name): """This is initial funciton""" self.name = name def voice(self): """Dog will speak as wangwang """ print('WangWangWang')
这是一个非常简单的类,但其中包含了类很重要的几个部分,包括类的声明、初始化的构造函数、属性、成员方法的定义等。
其中有几个地方需要注意:object是python中所有类的基类,在类的初始化时显式继承
self是类里的实例,为实例本身,在初始化后具有一系列的属性和方法,类方法的第一个参数按照约定需要使用self开头。
一个完整的类的声明还会包括基本属性、私有属性和保护变量等内容:
class Dog(object): """This is a dog class as example""" animal_kind = 'dog' #基本属性 animal_legs = 4 #基本属性也建议写到初始化构造函数中去 def __init__(self,name,age,params...): #利用__init__(self,params)进行初始化 """This is initial funciton""" self.name = name self.age = age #还可以定义各种其他的属性,作为实例初始化时候将传进来的参数进行赋值 self.__gender = 'male' #两个下划线开头是私有内部属性,只能在类内访问 def __privateGender(self): """This is pravate method""" print('This dog gender is %s',self.__gender) def voice(self): """Dog will speak as wangwang """ print('WangWangWang') print(self.__privateGender(self)) def run(self): """runing with legs""" print("This dog has %d legs to run"%self.animal_legs) #定义一大堆各种各样的方法
class是可以进行继承以及方法重写的,可以基于一个类继承,也可以基于多个类进行多重继承。
class Husky(Dog): """Husky inherent the Dog attris and method""" def __init__(self,name,age,color,params): Dog.__init__(self, name, age) #利用Dog这个父类的初始化 self.color = color #子类中特定属性的初始化 def jump(self): """Husky special jump function""" print('This dog could jump jump') def voice(self): """重写覆盖父类的函数,实现自己的特殊的方法" print('AoAoAoWu~~~~~~')
为了更好的便于阅读和复用代码,还需要使得代码满足一定的语言风格,这里选用了google的风格规范来对类进行声明,下面是一个例子
# ref from:https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/ class MyDog(object): """Summary of class here. #1.首先一句话简短的总结这个类的功能和作,文档字符串需要用三引号包括 # 对齐,空一行 If the class has public attributes, they may be documented here in an ``Attributes`` section and follow the same formatting as a function's ``Args`` section. Alternatively, attributes may be documented inline with the attribute's declaration (see __init__ method below). Properties created with the ``@property`` decorator should be documented in the property's getter method. Longer class information.... #随后详细的说明类的细节 Longer class information.... #类内部第一行的开始的文字都可以被__doc__ # 空一行,开始写这个类的各个属性,包括数据类型和作用 Attributes: likes_spam: A boolean indicating if we like SPAM or not. #属性的声明,包括数据类型和作用,xxx类型的数据for/used to/ofxxx eggs: An integer count of the eggs we have laid. """ def __init__(self, likes_spam=False): """Inits SampleClass with blah.""" # 下面是详细的例子 """Example of docstring on the __init__ method. # 对于初始化方法的说明 The __init__ method may be documented in either the class level docstring, or as a docstring on the __init__ method itself. Either form is acceptable, but the two should not be mixed. Choose one convention to document the __init__ method and be consistent with it. # 对于初始化方法的一些记录 Note: Do not include the `self` parameter in the ``Args`` section. # 初始化的参数输入,对于方法来说参数名(数据类型):描述的格式来写 Args: param1 (str): Description of `param1`. param2 (:obj:`int`, optional): Description of `param2`. Multiple lines are supported. param3 (:obj:`list` of :obj:`str`): Description of `param3`. """ self.likes_spam = likes_spam self.eggs = 0 # 输入参数的初始化 self.attr1 = param1 self.attr2 = param2 self.attr3 = param3 #: Doc comment *inline* with attribute #: list of str: Doc comment *before* attribute, with type specified self.attr4 = ['attr4'] self.attr5 = None """str: Docstring *after* attribute, with type specified.""" def public_method(self): """Performs operation blah.""" """Summary line. #第一行简写函数描述 # 空一行,对齐详细描述 Extended description of function. # 空一行对齐,写args 的各个内容,变量名(类型):描述 Args: arg1 (int): Description of arg1 arg2 (str): Description of arg2 # 空一行对齐,不同情况下的if else 返回值(类型):描述 Returns: int/float/bool dtype: Description of return value """
最后完整的按照风格来写一个类的示例:
class Dog(object): """ This is a class for Dog Dog class is the parents class of all dog, this class contain general attributes of dog and some common function of dogs, such as num legs, the voice fucntion, the runing functions. Attributes: name: A string of dog's name kind: A string of dog's family age: A integer of dog years gender: A boolean gender of dog, male=1 of famle=0 legs A integer if dog's legs weight: A float of dogs weight size: A string of dogs, one of big, middle, smal """ def __init__(self,args,gender,size): """initialize dog class, all attributes pass in with args, which is a dict or indepent params Input contain dict and str params, also there is private attribute Args: args.name(str): dog name args.kind(str): dog family args.age(int) : dog age gender(bool) : dog gender, male=1,famale=0 args.weight(float): dog weight size(str) : dog size """ self.name = args.name self.kind = args.kind self.age = args.age self.weight = args.weight # __legs(int) : dog legs,privite attribute, not the inputs params,写在前面用#做注释,不属于输入的参数的初始化 self.__legs = 4 """写在后面用三引号__legs(int) : dog legs,privite attribute""" self.size = size self.gender = gender def voice(self,size): """This is dog speak fucntion Different dog with different voice which related to the size,age and kind Args: size(str): dog size age(int) : dog age kind(srt): dog kind Returns: None, just print the voice """ if size=='big': print('Big WangWang') elif size =='middle': print('M wang') elif size=='small': print('Miao') # 附注:return 可从任意深度跳出函数,None
class MyClass: name = '' age = 0 __weight = 0 #私有变量 def __init__(self, n, a, w): #self必须作为函数的第一个参数 self.name = n self.age = a self.__weight = w def speak(self): print('%s 说:我 %s 岁'%(self.name, self.age)) x = MyClass('yao', 10, 30) x.speak()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要和大家分享如何调用百度的接口实现图片的文字识别。整体是用Python实现,所需要使用的第三方库包括aip、PIL、keyboard、pyinstaller,需要的可以参考一下
这篇文章主要为大家介绍了Python代码的一些方便快捷的调试技巧,文中含有详细新的步骤操作,有需要的朋友可以借鉴参考下,希望能够有所帮助
python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。本文将为大家详细介绍一下python中的线程threading.Thread()的使用,需要的可以参考一下
前言最近 Python 之父 Guido van Rossum(龟爷)终于在 Python 官方邮件组落实了 Python 2 7 的终焉之日(EOL)。说的是 Python
在实现贪吃蛇游戏时,首先需要使用python内置的turtle模块来实现创建游戏窗体与键盘按键的监听工作,然后使用freegames模块进行贪吃蛇的绘制工作。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008