# -*- 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)的更多相关文章

  1. python之定义类创建实例

    https://www.cnblogs.com/evablogs/p/6688938.html 类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 1 2 >>&g ...

  2. python 类的定义 实例化 实例完后初始化

    先来看看 类的__init__, 类的__new__ , 元类的__new__的执行顺序 class TMetaclass(type): def __new__(cls,name,bases,attr ...

  3. Kotlin基本语法笔记3之定义类、继承及创建实例

    定义类 class MyObject private constructor(name: String, age: Int) { private var name: String private va ...

  4. python基础教程:定义类创建实例

    类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 >>>class Person(object): #所有的类都是从object类继承 pass #pass ...

  5. [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  6. Javascript定义类(class)的三种方法

    将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...

  7. python之元编程(元类实例)

    本实例是元类实例,功能是记录该的子类的类名,并以树状结构展示子类的类名. RegisterClasses继承自type,提供的功能是在__init__接口,为类创建了childrens的集合,并类名保 ...

  8. C++中如何定义类和对象?

    在C++语言中,对象的类型被称为类,类代表了某一批对象的共性和特征. 类是对象的抽象,而对象是类的具体实例.如同C中的结构体一样,我们要先定义一个结构体,再使用结构体去定义一个变量.同一个结构体可以定 ...

  9. 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器

    Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...

随机推荐

  1. 【es6】正则扩展

  2. CNN-利用1*1进行降维和升维

    降维: 比如某次卷积之后的结果是W*H*6的特征,现在需要用1*1的卷积核将其降维成W*H*5,即6个通道变成5个通道: 通过一次卷积操作,W*H*6将变为W*H*1,这样的话,使用5个1*1的卷积核 ...

  3. Ubuntu系统Java开发环境的搭建

    操作系统:Linux x64 / Ubuntu 14.04 Java JDK版本:jdk-8u65-linux-x64.tar.gz 声明:转载请注明出处及本文链接 本文原文地址:Ubuntu系统Ja ...

  4. Delphi下OpenGL2d绘图(03)-画线

    一.前言 画线与画点基本上代码是相同.区别在于glBegin()的参数.绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码.修改的部份为 Draw 函数的内容. 二. ...

  5. Mysql的with rollup分组统计功能(5.1以上版本)

    RollUp是上卷功能,类似于数据挖掘中的上卷操作. ROLLUp的功能和Order by功能是互斥的. mysql> SELECT year, SUM(profit) FROM sales G ...

  6. 【转载】在Angular 2/Typescript中声明全局变量的最佳方式是什么?

    问题详细描述 我想在Typescript语言中的Angular 2中声明一些全局可见的变量.最佳的实践方法是? 推荐的实现方法 这是最简单的解决方案,无需使用Service或Observer: 将全局 ...

  7. 用INFORMATION_SCHEMA逻辑MySQL的索引

    分库分表的场景下,变更目前还不知道有哪个表变更索引失败,是不是所有的表都变更成功了,所以可以从INFORMATION_SCHEMA通过罗列索引个数,或者查看索引行,就可以知道是不是所有的都变更成功了: ...

  8. SSIS教程:创建简单的ETL包 -- 3. 添加日志(Adding Logging)

    Microsoft Integration Services 包含日志记录功能,可通过提供任务和容器事件跟踪监控包执行情况以及进行故障排除. 日志记录功能非常灵活,可以在包级别或在包中的各个任务和容器 ...

  9. RocketMQ异常

    rocketMQ下载下来的时候,bin目录下有mqbroker.exe和mqnamesrv.exe两个可执行文件,双击执行都可以成功启动:

  10. [C#]浅谈协变与逆变

    看过几篇说协变与逆变的博客,虽然都是正确无误的,但是感觉都没有说得清晰明了,没有切中要害.那么我也试着从我的理解角度来谈一谈协变与逆变吧. 什么是协变与逆变 MSDN的解释:https://msdn. ...