定义类/实例(Class)
# -*- coding: UTF-8 -*-
class pp():
'''Description'''
def __init__(self,name): #初始化函数
self.name = name
self.i ='cxly'
def fn(self):
if self.name.split(' ')[0] == 'Liu':
return 'f:L'
else:
return 'f:ooo'
def __str__(self):
return self.name
def flen(self):
return len(self.name)
p_len = property(flen) #custom a property
def __del__(self): #定义解构器,与__init__对应,可以没有
print 'i am finished'
nn=['Liu y','cui xiao','zhang san','Liu 2'] for i in nn: print pp(i).p_len
直接初始化类中的函数:
class test(object):
"""docstring for test"""
def __init__(self, aa,c):
self.aa = aa
self.c = c
self.i='ddd'
test.t1(self) #初始化下面的t1,t2函数
test.t2(self) def t1(self):
if self.aa>10:
self.aa = str(self.aa) + 'aagreater'
self.i='t1ddd'
self.c=''
else:
self.aa = str(self.aa) + 'aaless'
return self.aa def t2(self):
if self.i=='t1ddd':
self.c=''
return self.i,self.c
else:
return 'meiguolai' def __str__(self):
return str(self.c) # tt= property(t1)
# tt2=property(t2) m=test(100,20)
print dir(m)
print m #返回值为2000,不需要再调用t1,t2函数
获取某个类下的所有实例
#!/usr/bin/python
# -*- coding: utf-8 -*-
'its a class test'
__author__ = 'mm_obj' #定义名为Stu的类
class Stu(object):
#define Stu property
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender
#define Stu method age
def p_stu_age(self):
print '%s \'s age is:%d' % (self.name,self.age) #define Stu method name age gender
def p_stu_ag(self):
print '%s \'s age is:%d,gender is:%s' % (self.name,self.age,self.gender) def p_stu_name(self):
print '%s' % (self.name) Lily=Stu('Lily',20,'female')
Lucy=Stu('Lucy',25,'female')
#Print Lily.p_stu_age()
#print Lily.p_stu_ag() #Lily.age=26
#print Lily.p_stu_ag() #获取Stu类下的所有实例
import gc
for obj in gc.get_objects():
if isinstance(obj,Stu):
print obj.name
将方法定义为属性:
class people():
def __init__(self,name,age):
self.name = name
self.age = age def page(self): #定义方法page,获取用户年龄
return self.age
aage = property(page) #定义属性aage,将方法page定义为属性aage Lily = people('Lily',25) print dir(Lily)
print Lily.aage
返回:
['__doc__', '__init__', '__module__', 'aage', 'age', 'name', 'page']
25
定义私有函数:
class TT:
def bb(self):
print("its bb")
self.__auth() #调用类中的私有函数 def __auth(self): #定义私有函数,只能在类内部被其他函数调用
print('its auth') def __del__(self):
print('finished') t1=TT()
t1.bb()
在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。
以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Class__name,所以,仍然可以通过_Class__name来访问__name变量。但是强烈建议不这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名
通过类方法修改实例的值:
class Student(object):
def __init__(self,name,score):
self.name=name
self.__score=score def get_score(self):
print('%s: score is %d.' %(self.name,self.__score)) def set_score(self, score): #设置实例的值,并对其进行判断是否合法
if 0 <= score <= 100:
self.__score = score
else:
raise ValueError('bad score') s=Student('Lily',22)
s.get_score() #返回Lily: score is 22. s.set_score(11)
s.get_score() #Lily: score is 11.
类的继承:
class A(object):
num = 0 #此为类变量
all =[]
def __init__(self,name,age):
self.name=name
self.age=age
self.tell() #初始化tell函数 def tell(self):
A.num +=1 #调用类变量的属性值
A.all.append(self.name)
print 'i am %s,my num is %d'%(self.name,A.num)
#print 'i want to sutdy' class B(A):
def __init__(self,name,age,course):
super(B,self).__init__(name,age) #继承class A
#A.__init__(self,name,age) #旧类的写法,等同于super(),不建议再继续使用
self.course=course lily=B('lyly',21,'math') #返回i am lyly,my num is 1
print lily.name,lily.course #返回lyly math
lily.tell() #返回i am lyly,my num is 2
lily.tell() #返回i am lyly,my num is 3。tell方法调用一次,A.num即会+1,所以最好在init中进行初始化为好,如下:
print A.all,A.num #返回['lyly', 'lyly', 'lyly'] 3
#初始化类变量,计数
class A(object):
num = 0 #此为类变量
all =[]
def __init__(self,name,age):
self.name=name
self.age=age
A.num +=1
A.all.append(self.name) def tell(self):
print 'i am %s,my num is %d'%(self.name,A.num) class B(A):
def __init__(self,name,age,course):
super(B,self).__init__(name,age)
#A.__init__(self,name,age) #旧类的写法,等同于super(),不建议再继续使用
self.course=course zhangsan=A('zhangsan',22)
liming=B('liming',21,'english')
lily=B('lyly',21,'math') #返回i am lyly,my num is 1
print lily.name,lily.course #返回lyly math
lily.tell() #返回i am lyly,my num is 2
lily.tell() #返回i am lyly,my num is 3
print A.all,A.num #返回['zhangsan', 'liming', 'lyly'] 3
类变量与实例变量,初始化类函数:
class A(object):
num = 0 #此为类变量
all =[]
def __init__(self,name,age):
self.name=name
self.age=age
self.tell() #初始化tell函数 def tell(self):
A.num +=1 #调用类变量的属性值
A.all.append(self.name)
print 'i am %s,my num is %d'%(self.name,A.num)
#print 'i want to sutdy %s'%course zhangsan1 = A('zhangsan',20)
zhangsan2 = A('zhangsan2',22)
print A.all
#返回:
#i am zhangsan,my num is 1
#i am zhangsan2,my num is 2
#['zhangsan', 'zhangsan2']
定义类/实例(Class)的更多相关文章
- python之定义类创建实例
https://www.cnblogs.com/evablogs/p/6688938.html 类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 1 2 >>&g ...
- python 类的定义 实例化 实例完后初始化
先来看看 类的__init__, 类的__new__ , 元类的__new__的执行顺序 class TMetaclass(type): def __new__(cls,name,bases,attr ...
- Kotlin基本语法笔记3之定义类、继承及创建实例
定义类 class MyObject private constructor(name: String, age: Int) { private var name: String private va ...
- python基础教程:定义类创建实例
类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 >>>class Person(object): #所有的类都是从object类继承 pass #pass ...
- [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- python之元编程(元类实例)
本实例是元类实例,功能是记录该的子类的类名,并以树状结构展示子类的类名. RegisterClasses继承自type,提供的功能是在__init__接口,为类创建了childrens的集合,并类名保 ...
- C++中如何定义类和对象?
在C++语言中,对象的类型被称为类,类代表了某一批对象的共性和特征. 类是对象的抽象,而对象是类的具体实例.如同C中的结构体一样,我们要先定义一个结构体,再使用结构体去定义一个变量.同一个结构体可以定 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
随机推荐
- javac的词法分析
1.词法分析将Java源文件的字符流转变为对应的Token流. JavacParser类规定了哪些词是符合Java语言规范规定的词,而具体读取和归类不同词法的操作由Scanner类来完成. ...
- InnoDB的B+树索引使用
何时使用索引 并不是在所有的查询条件下出现的列都需要添加索引.对于什么时候添加B+树索引,我的经验是访问表中很少一部分行时,使用B+树索引才有意义.对于性别字段.地区字段.类型字段,它们可取值的范围很 ...
- mysql去除重复记录案例
例1,表中有主键(可唯一标识的字段),且该字段为数字类型 1 测试数据 /* 表结构 */ DROP TABLE IF EXISTS `t1`; CREATE TABLE IF NOT EXISTS ...
- eclipse修改默认注释
(来源:https://www.cnblogs.com/yangjian-java/p/6674772.html) 一.背景简介 丰富的注释和良好的代码规范,对于代码的阅读性和可维护性起着至关重要的作 ...
- DDD学习笔记(一)
最近开始筹备一个电商项目. 其实是公司的老本行了. 但今年公司希望在做项目的同时, 沉淀出一套针对电商的基础产品. 这样可以提高新项目的开发效率, 减少重复劳动. 那现如今, DDD(领域驱动设计)应 ...
- 动态生成自定义控件ascx如何给ascx传值
有机会看到有网友在论坛上发出问题: 在网页上的铵钮执行之后,动态加载的用户控件,如果没有处理好,会在子用户控件的铵钮被执行时抛弃.因此我们需要着重需要处理的关键点.同相子用户控件在动态加载之后,它的状 ...
- Linux 服务器 MySql的安装和网站的发布
Linux安装MySql,并配置能通过自己的电脑连接服务器的数据库 昨天安装的MySql,今天上午配置MySql能使用本机连接服务器数据库,服务器时DigitalOcean的,提供了很全面很专业的文档 ...
- JavaScript中自定义函数以及文本框、radio、下拉框的值的获取,结合淘宝竞拍案例来理解。。。
淘宝竞拍案例: HTML部分代码: <form action="#" method="post"> <h2>欢迎进入淘宝竞拍</h ...
- redis内存模型及应用解读
Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型:字符串.哈希 ...
- 最大行走路线问题(DP)
在一个NxN的棋盘上,每个格子里有若干个棋子,假设起点为左上角的格子,且每次只能向下或向右走一格,问怎样走才能得到最多的棋子. 这是很简单的递推题了. 因为只能向下或者向右,所以其实我们可以把棋盘看成 ...