python入门篇-2
来源:互联网 发布:制作桌面日历软件 编辑:程序博客网 时间:2024/06/05 05:46
有注释的,应该很好懂的。。
class bird(object):#定义类bird,括号中的object,当括号中为object时,说明这个类没有父类(到头了) have_feather=True#下面是两个属性 way_of_reproduction='egg'summ=bird()#summ是类bird的一个对象print (summ.way_of_reproduction)#通过第一句创建对象,并说明summer是类别鸟中的一个对象,summer就有了鸟的类属性,对属性的引用是通过# 对象.属性(object.attribute) 的形式实现的。#日常认知中,我们在通过属性识别类别的时候,有时根据这个东西能做什么事情来区分类别。# 比如说,鸟会移动。这样,鸟就和房屋的类别区分开了。这些动作会带来一定的结果,比如移动导致位置的变化。#这样的一些“行为”属性为方法(method)。Python中通过在类的内部定义函数,来说明方法。class bird(object): have_feather=True way_of_reproduction='egg' def move(self,dx,dy):#也是一个属性 position=[1,0] position[0]=position[0]+dx position[1]=position[1]+dy return positionsumm =bird()print ('after move:',summ.move(5,8))#它的参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self,无论是否用到。#类别本身还可以进一步细分成子类,比如说,鸟类可以进一步分成鸡,大雁,黄鹂。在OOP中,我们通过继承(inheritance)来表达上述概念class chicken(bird):#新定义的鸡类增加了两个属性 way_of_move='walk'#移动方式是walk; possible_in_KFC=True#在类定义时,括号里为了Bird。这说明,Chicken是属于鸟类(Bird)的一个子类,即Chicken继承自Bird。自然而然,# Bird就是Chicken的父类。Chicken将享有Bird的所有属性。尽管我只声明了summer是鸡类,它通过继承享有了父类的属性# (无论是变量属性have_feather还是方法属性move)summer=chicken()print (summer.way_of_reproduction,summer.way_of_move,summer.move(3,4))#在定义方法时,必须有self这一参数。这个参数表示某个对象。对象拥有类的所有性质,那么我们可以通过self,调用类属性。class human(object): laugh='haha' def show_laugh(self): print (self.laugh) def laugh_more(self): for hehe in list(range(5)): self.show_laugh()sgx=human()sgx.show_laugh()print ('分割线')sgx.laugh_more()#这里有一个类属性laugh。在方法show_laugh()中,通过self.laugh,调用了该属性的值。#通过对象可以修改类属性值。但这是危险的。类属性被所有同一类及其子类的对象共享。类属性值的改变会影响所有的对象。#_init__()是一个特殊方法(special method)。Python有一些特殊方法。Python会特殊的对待它们。特殊方法的特点是名字前后有两个下划线。#如果你在类中定义了__init__()这个方法,创建对象时,Python会自动调用这个方法。这个过程也叫初始化。和C++构造函数差不多。class angrybird(bird):#bird的子类 def __init__(self,more_words): print ('we are angry birds!',more_words)sun=angrybird('angry')#我们看到,尽管我们只是创建了summer对象,但__init__()方法被自动调用了。最后一行的语句(summer = happyBird...)先创建了对象,然后执行:sun.__init__('fuck you')#'angry' 被传递给了__init__()的参数more_words#我们讲到了许多属性,但这些属性是类的属性。所有属于该类的对象会共享这些属性。比如说,鸟都有羽毛,鸡都不会飞。#在一些情况下,我们定义对象的性质,用于记录该对象的特别信息。比如说,人这个类。性别是某个人的一个性质,# 不是所有的人类都是男,或者都是女。这个性质的值随着对象的不同而不同。李雷是人类的一个对象,性别是男;韩美美也是人类的一个对象,性别是女。#当定义类的方法时,必须要传递一个self的参数。这个参数指代的就是类的一个对象。我们可以通过操纵self,来修改某个对象的性质。# 比如用类来新建一个对象,即下面例子中的li_lei, 那么li_lei就被self表示。我们通过赋值给self.attribute,# 给li_lei这一对象增加一些性质,比如说性别的男女。self会传递给各个方法。在方法内部,可以通过引用self.attribute,查询或修改对象的性质。#这样,在类属性的之外,又给每个对象增添了各自特色的性质,从而能描述多样的世界。class Human(object): def __init__(self, input_gender): self.gender = input_gender def printGender(self): print (self.gender)li_lei = Human('male') # 这里,'male'作为参数传递给__init__()方法的input_gender变量。print (li_lei.gender)li_lei.printGender()#在初始化中,将参数input_gender,赋值给对象的性质,即self.gender。#li_lei拥有了对象性质gender。gender不是一个类属性。Python在建立了li_lei这一对象之后,使用li_lei.gender这一对象性质,# 专门储存属于对象li_lei的特有信息。#对象的性质也可以被其它方法调用,调用方法与类属性的调用相似,正如在printGender()方法中的调用。#两个内置函数,dir()和help()#dir()用来查询一个类或者对象所有属性。你可以尝试一下print (dir(list))print (help(list))#list是python内置的一个类,所以我们新建一个表的时候相当于在建立这个list类的对象nl = [1,2,5,3,5]#n1是list的一个对象print (nl.count(5)) # 计数,看总共有多少个5print (nl.index(3)) # 查询 nl 的第一个3的下标nl.append(6) # 在 nl 的最后增添一个新元素6nl.sort() # 对nl的元素排序print (nl[0:6:1])print (nl.pop()) # 从nl中去除最后一个元素,并将该元素返回。nl.remove(2) # 从nl中去除第一个2print (nl[0:5:1])nl.insert(0,9) # 在下标为0的位置插入9print (nl[0:6:1])#总之,list是一个类。每个列表都属于该类。#使用dir(list)的时候,能看到一个属性,是__add__()。从形式上看是特殊方法(下划线,下划线)。它特殊在哪呢?#这个方法定义了"+"运算符对于list对象的意义,两个list的对象相加时,会进行的操作。print ([1,2,3] + [5,6,9])#运算符,比如+, -, >, <, 以及下标引用[start:end]等等,从根本上都是定义在类内部的方法。#print ([1,2,3] - [3,4])#会有错误信息,说明该运算符“-”没有定义。现在我们继承list类,添加对"-"的定义#内置函数len()用来返回list所包含的元素的总数。内置函数__sub__()定义了“-”的操作:从第一个表中# 去掉第二个表中出现的元素。如果__sub__()已经在父类中定义,你又在子类中定义了,# 那么子类的对象会参考子类的定义,而不会载入父类的定义。任何其他的属性也是这样。class superList(list): def __sub__(self, b): a = self[:] # 这里,self是supeList的对象。由于superList继承于list,它可以利用和list[:]相同的引用方法来表示整个对象。 b = b[:] while len(b) > 0: element_b = b.pop() if element_b in a: a.remove(element_b) return aprint (superList([1,2,3]) - superList([3,4]))#定义运算符对于复杂的对象非常有用。举例来说,人类有多个属性,比如姓名,年龄和身高。# 我们可以把人类的比较(>, <, =)定义成只看年龄。这样就可以根据自己的目的,# 将原本不存在的运算增加在对象上了。上面这个例子还是有点没太懂。。T_T
C:\Python30\python.exe E:/python笔记/Class.pyeggafter move: [6, 8]egg walk [4, 4]haha分割线hahahahahahahahahahawe are angry birds! angrywe are angry birds! fuck youmalemale['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count','extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']Help on class list in module builtins:class list(object) | list() -> new list | list(sequence) -> new list initialized from sequence's items | | Methods defined here: | | __add__(...) | x.__add__(y) <==> x+y | | __contains__(...) | x.__contains__(y) <==> y in x | | __delitem__(...) | x.__delitem__(y) <==> del x[y] | | __eq__(...) | x.__eq__(y) <==> x==y | | __ge__(...) | x.__ge__(y) <==> x>=y | | __getattribute__(...) | x.__getattribute__('name') <==> x.name | | __getitem__(...) | x.__getitem__(y) <==> x[y] | | __gt__(...) | x.__gt__(y) <==> x>y | | __iadd__(...) | x.__iadd__(y) <==> x+=y | | __imul__(...) | x.__imul__(y) <==> x*=y | | __init__(...) | x.__init__(...) initializes x; see x.__class__.__doc__ for signature | | __iter__(...) | x.__iter__() <==> iter(x) | | __le__(...) | x.__le__(y) <==> x<=y | | __len__(...) | x.__len__() <==> len(x) | | __lt__(...) | x.__lt__(y) <==> x<y | | __mul__(...) | x.__mul__(n) <==> x*n | | __ne__(...) | x.__ne__(y) <==> x!=y | | __repr__(...) | x.__repr__() <==> repr(x) | | __reversed__(...) | L.__reversed__() -- return a reverse iterator over the list | | __rmul__(...) | x.__rmul__(n) <==> n*x | | __setitem__(...) | x.__setitem__(i, y) <==> x[i]=y | | __sizeof__(...) | L.__sizeof__() -- size of L in memory, in bytes | | append(...) | L.append(object) -- append object to end | | count(...) | L.count(value) -> integer -- return number of occurrences of value | | extend(...) | L.extend(iterable) -- extend list by appending elements from the iterable | | index(...) | L.index(value, [start, [stop]]) -> integer -- return first index of value. | Raises ValueError if the value is not present. | | insert(...) | L.insert(index, object) -- insert object before index | | pop(...) | L.pop([index]) -> item -- remove and return item at index (default last). | Raises IndexError if list is empty or index is out of range. | | remove(...) | L.remove(value) -- remove first occurrence of value. | Raises ValueError if the value is not present. | | reverse(...) | L.reverse() -- reverse *IN PLACE* | | sort(...) | L.sort(key=None, reverse=False) -- stable sort *IN PLACE* | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | __hash__ = None | | __new__ = <built-in method __new__ of type object at 0x1E1BAD30> | T.__new__(S, ...) -> a new object with type S, a subtype of TNone23[1, 2, 3, 5, 5, 6]6[1, 3, 5, 5][9, 1, 3, 5, 5][1, 2, 3, 5, 6, 9][1, 2]Process finished with exit code 0
0 0
- python入门篇-2
- Python爬虫入门【入门篇】
- Python入门解析篇
- python入门篇-1
- Python基础入门篇
- Python入门2
- python入门2
- Python基础入门(2)
- python入门2
- python 入门(2)
- python入门(2)
- Python入门级2
- python入门2
- Python 入门---2
- python入门2-函数
- Python入门(2)
- python入门(2)
- Python入门2
- 基于Android的Linux内核的电源管理 -- 1.概述
- 哈希表
- msm7227平台linux I2C驱动分析(2.6.29)
- Oracle基本语句
- python入门篇-1
- python入门篇-2
- php:兄弟连之面向对象版图形计算器2
- oracle 对象查询
- Codeforces Round #249 (Div. 2) ABC
- 严重: Exception sending context initialized event to listener instance of class org.springframework.we
- 伸展树
- 将ZXING打包生成jar文件
- 关于socket的一些个人理解
- freemarker中的round、floor和ceiling数字的舍入处理