Python学习之类
来源:互联网 发布:windows无法识别音响 编辑:程序博客网 时间:2024/06/15 00:40
_author__ = "leaves"
# 简单定义类
# name前面加双下划线是让其变为私有化,不加的话可以直接通过变量名访问
# self相当于C++的this指针
# 同一个类可以生成无数个对象,这些对象都很相似,因为他们来源于同一个类,当一个对象的方法
# 被调用的时候,对象会将自身作为第一个参数,Python就知道哪一个对象在调用方法了
class Persson:
def setName(self, name):
self.__name = name
def getName(self):
return self.__name
def greet(self):
print "Hello, world! I'am %s." % self.__name
foo = Persson()
foo.setName('Lucy')
bar = Persson()
bar.setName('Lily')
foo.greet()
bar.greet()
# 定义了一个可供所有成员(实例)访问的变量
class MemberCount:
members = 0
def init(self):
MemberCount.members += 1
m1 = MemberCount()
m1.init()
print m1.members
m2 = MemberCount()
m2.init()
print m2.members
print '----------------------------------'
# 超类(继承两个子类)
class Calculator:
def calculate(self, expression):
self.value = eval(expression)
class Talker:
def talk(self):
print 'Hi, my value is ', self.value
class TalkingCalculator(Calculator, Talker):
pass
tc = TalkingCalculator()
tc.calculate('1+2*3')
tc.talk()
print '----------------------------------'
print isinstance(tc, Talker)
print isinstance(tc, TalkingCalculator)
print hasattr(tc, 'talk')
print hasattr(tc, 'tald1')
# 默认值为None
print callable(getattr(tc, 'talk', None))
print callable(getattr(tc, 'talk1', None))
setattr(tc, 'value', '4+6')
print tc.talk()
print '----------------------------------'
import random as r
# 调用基类的初始化方法
class Fish:
def __init__(self):
self.x = r.randint(0, 10)
self.y = r.randint(0, 10)
def move(self):
self.x -= 1
print '我的位置是:', self.x, self.y
class GoldFish(Fish):
def __init__(self):
Fish.__init__()
# 或者
super.__init__()
self.hungry = False
class C:
pass
# 一个类认为是其自身的子类
print issubclass(GoldFish, GoldFish)
print issubclass(GoldFish, Fish)
print issubclass(GoldFish, object)
# 第二个参数可以是一个元组
print issubclass(GoldFish, (C, object))
print '----------------------------------'
# property通过属性设置属性,假如某天需要修改setSize,getSize,我们只要修改property,
# 调用的地方不需要修改
class C:
def __init__(self, size=10):
self.size = size
def setSize(self, size):
self.size = size
def getSize(self):
return self.size
def delSize(self):
del self.size
# 跟后面的属性操作保持一致
x = property(getSize, setSize, delSize)
c1 = C()
print c1.getSize
print c1.x
c1.x = 18
print c1.x
del c1.x
print '----------------------------------'
# 组合(没有继承关系的类放在一起)
class Turtle:
def __init__(self, x):
self.num = x
class Fish:
def __init__(self, x):
self.num = x
class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print "水池里总共有乌龟 % d 只, 小鱼 %d 条!" % (self.turtle.num, self.fish.num)
pool = Pool(1, 10)
pool.print_num()
print '----------------------------------'
# 属性定义了和类方法相同
class C:
def x(self):
print "X-Man"
c = C()
c.x()
# python属性不需要声明,c对象的属性
c.x = 1
print c.x
# 下面会出错,属性名和方法名相同,属性会覆盖方法,属性用名词,方法用动词
# c.x()
print '----------------------------------'
class CC:
def setXY(self, x, y):
self.x = x
self.y = y
def printXY(self):
print (self.x, self.y)
dd = CC()
print dd.__dict__
print CC.__dict__
dd.setXY(4, 5)
print dd.__dict__
print CC.__dict__
del CC
dd.printXY()
del CC
# 找不到CC了
# ee = CC()
# 类中定义的属性和方法是静态变量,就算类对象被删除了,他们依然存在内存中,所以编程中应该考虑使用实例属性(self.**),
# 而不是使用类属性,类属性只用来跟踪跟类相关的值
dd.printXY()
输出:
"D:\Program Files\Python\python.exe" G:/HelloPython/list/class.py
Hello, world! I'am Lucy.
Hello, world! I'am Lily.
1
2
----------------------------------
Hi, my value is 7
----------------------------------
True
True
True
False
True
False
Hi, my value is 4+6
None
----------------------------------
Traceback (most recent call last):
File "G:/HelloPython/list/class.py", line 190, in <module>
del CC
NameError: name 'CC' is not defined
True
True
False
False
----------------------------------
<bound method C.getSize of <__main__.C instance at 0x000000000258E8C8>>
10
18
----------------------------------
水池里总共有乌龟 1 只, 小鱼 10 条!
----------------------------------
X-Man
1
----------------------------------
{}
{'__module__': '__main__', 'printXY': <function printXY at 0x0000000002597898>, 'setXY': <function setXY at 0x0000000002597828>, '__doc__': None}
{'y': 5, 'x': 4}
{'__module__': '__main__', 'printXY': <function printXY at 0x0000000002597898>, 'setXY': <function setXY at 0x0000000002597828>, '__doc__': None}
(4, 5)
Process finished with exit code 1
- Python 学习之类(Class)
- Python学习之类属性
- Python学习之类
- python学习总结之类对象
- Python之类(Class)的学习
- Python学习笔记之类和对象
- python之类
- Python之类
- Python之类
- python学习之类特殊方法定制 __add__,__iadd__,__radd__
- Python小贴士之类
- python之类定义
- python之类--socket
- python之类之select
- python之类-django进阶
- Python抽象之类
- C++学习之类
- UML学习之类图
- hdu 5312 Sequence
- HDU - 2732 Leapin' Lizards(ISAP Dinic EK)
- JAVA内省(Introspector)
- Android中收货地址管理Demo
- python常用函数
- Python学习之类
- 数据库连接池DBCP和C3P0
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- ios CAAnimation动画结束后会闪烁一下
- 第一篇,老本行,聊聊颜色和光谱
- (转载)iOS开发中断言的使用—NSAssert()
- 解决警告“ld: warning: directory not found for option”
- 中值滤波器 ( Median Filter ) C++ 实现
- PostgreSQL日期函数