面向对象之类的方法 私有属性(加俩下划线) 新式类 经典类的区别

@classmetod

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Animal:
    def __init__(self,name):
        self.name = name
    hobbie = ‘meat‘

    @classmethod   #类方法不能访问实例变量  加上后  self.name就无法访问了
    def talk(self):
        #print("%s is talking" %self.name)
        print("%s is talking" %self.hobbie)

Animal.hobbie
Animal.talk()

d = Animal("wangwang")
d.talk()

  

@staticmethon

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Animal:
    def __init__(self,name):
        self.name = name
    hobbie = ‘meat‘

    ‘‘‘
    @classmethod   #类方法不能访问实例变量  self.name就无法访问了
    def talk(self):
        #print("%s is talking" %self.name)
        print("%s is talking" %self.hobbie)
    ‘‘‘
    @staticmethod   #静态方法,跟事例没有任何关系了,实例变量和类变量都无法访问了,
    def walk():
        print("is walking..." )

#Animal.hobbie
#Animal.talk()

d = Animal("wangwang")
d.walk()

  

@property

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Animal:
    def __init__(self,name):
        self.name = name
        self.num = None
    hobbie = ‘meat‘

    ‘‘‘
    @classmethod   #类方法不能访问实例变量  self.name就无法访问了
    def talk(self):
        #print("%s is talking" %self.name)
        print("%s is talking" %self.hobbie)

    @staticmethod   #静态方法,跟事例没有任何关系了,实例变量和类变量都无法访问了,
    def walk():
        print("is walking..." )
    ‘‘‘
    @property   #加了property后babit就不是方法了,调用时不用加括号,是属性。把方法变成属性,类变量实例变量还可以访问。不能传值了。如果非要传值看下面的例子,删除也在下面
    def habit(self):
        print("[%s] habit is xxoo" %self.name)

   #往里面传值
    @property
    def total_players(self):
        return self.num
    @total_players.setter
    def total_players(self,num):
        self.num = num
        print("total players:",self.num)

    #删值
    @total_players.deleter
    def total_players(self):
        print("total player got delted")
        del self.num
#Animal.hobbie
#Animal.talk()

# d = Animal("wangwang")
# d.walk()

d = Animal("WangWang")
d.habit

print(d.total_players)
d.total_players = 3
del d.total_players
print(d.total_players)

私有变量(私有属性))   外部无法访问,如果特殊情况下非要访问也是可以的

print("OUT__Num:",d.__num)改成 print("OUT__Num:",d._Animal__num)
#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Animal:
    def __init__(self,name):
        self.name = name
        self.__num = None
    hobbie = ‘meat‘

    ‘‘‘
    @classmethod   #类方法不能访问实例变量  self.name就无法访问了
    def talk(self):
        #print("%s is talking" %self.name)
        print("%s is talking" %self.hobbie)

    @staticmethod   #静态方法,跟事例没有任何关系了,实例变量和类变量都无法访问了,
    def walk():
        print("is walking..." )
    ‘‘‘
    @property   #加了property 后babit就不是方法了,是属性。把方法变成属性,类变量实例变量还可以访问。不能传值了。如果非要传值看下面的例子,删除也在下面
    def habit(self):
        print("[%s] habit is xxoo" %self.name)

   #往里面传值
    @property
    def total_players(self):
        return self.__num
    @total_players.setter
    def total_players(self,num):
        self.__num = num
        print("total players:",self.__num)

    #删值
    @total_players.deleter
    def total_players(self):
        print("total player got delted")
        del self.num
#Animal.hobbie
#Animal.talk()

# d = Animal("wangwang")
# d.walk()

d = Animal("WangWang")
d.habit

print(d.total_players)
d.total_players = 3
d.__num = 9
print("OUT__Num:",d.__num)
#del d.total_players
print(d.total_players)

  

多继承 经典类和新式类的区别

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# B > C  > A 广度优先  从同一级从左到右以此查找,然后再去上一级   新式类
# B > A > C                   深度有先   经典类
#新式类和经典类 区别在于 py2 和py3 的区别,同样的代码用2.7的就成了深度优先
class A:                               #经典类
#class A(object):                       #新式类
    n = "A"
    def f2(self):
        print("AF2")
class B(A):
    n = "B"
    def f1(self):
        print("B")
    def f2(self):
        print("B2")
class C(A):
    n = "C"
    def f2(self):
        print("C")

class D(B,C):
    pass

d = D()
#d.f1()
d.f2()

#面向对象特性之多态
‘‘‘
__doc__
显示类的解释注释

__del__
析构方法
等程序执行结束后统一销毁

__call__
实例化加()自动执行call方法  无卵用

__new__
把类重写, new调用了init   暂时无用

__dict__
类的成员变量以字典形式显示出来

‘‘‘

  

时间: 2024-10-15 22:11:06

面向对象之类的方法 私有属性(加俩下划线) 新式类 经典类的区别的相关文章

结构体命名时加了下划线

举例: typedef struct _ssidCfg_{ unsigned char ret;  unsigned char scanSsid; unsigned char priority;  unsigned char encryption;  unsigned char ssid[32]; unsigned char passwd[32];}ssidCfg, *pSsidCfg; 加了下划线的命名只是为了说明此结构体变量是基本的那个变量,只是为了和后面没有加下划线的做区别而已

对象方法、类方法、原型方法 && 私有属性、公有属性、公有静态属性

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>test</title> </head> <body> <script> //对象构造函数 function Atest(name){ //私有属性,只能在对象构造函数内部使用 var class

Object-C 声明属性为什么用下划线,代码规范和编程风格

原文:http://blog.sina.com.cn/s/blog_7b9d64af0101923n.html 在阅读和书写关于iPhone编程的代码的时候,发现有很多这样的情况: 看到很多源代码里面,使用前面带下划线变量,然后在@synthesize 语句中 在用一个不带下划线的变量名. 这样做,到底有什么作用? 因为我常常是以这种方式来做的: *.h中申明变量 #import <UIKit/UIKit.h> @interface NewPlayerController : UIViewCo

Object-C 声明属性为什么用下划线

看到很多源代码里面,使用前面带下划线变量,然后在@synthesize 语句中 在用一个不带下划线的变量名.这样做,到底有什么作用? 百度之后发现,使用下划线的变量just 一个实例变量,比如@synthesize name = _name 我们同样可以用 foo 代替 _name,只是一种的代码的规范和编程风格,那个下划线只是为了方便区别全局变量和本地变量,或者防止变量重名. 凡是在头文件里面定义了@property的变量,必定要@synthesize.   self.nameVarPtr =

面向对象 字段、方法、属性

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _02面向对象复习 { class Program { static void Main(string[] args) { Person p = new Person(); p.Age = -110; p.Name = "zhangsan"

面向对象的一些方法与属性

常用 常用属性 obj.__calss__ # 查看对象的类 class.__name__ # 类的名字 class.__bases__ # 类的父类 class.__mro__ # 该类实例调用方法的查找顺序 基本方法 __new__(cls[, ...]) 1. __new__ 是在一个对象实例化的时候所调用的第一个方法2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法3. __new__ 决定是否要使用该 __init__ 方法,因为 __new__ 可以调用

私有属性/方法的问题

在属性/方法名前有双下划线的,称为私有属性/方法,私有属性/方法外部不能直接访问, 一般访问类的私有属性,可以通过调用 使用了私有属性的方法 达到访问私有属性, 但python中并没有真正意义的私有,可以通过 _类名__属性/方法 来访问. 例: 有一个Woman类,内有私有属性 __age 和 私有方法 __secret(self) # 实例化一个小明对象 xiaoming = Woman("xiaoming") # 通过上述方法访问私有属性 print(xiaoming._Woma

私有属性和方法

# 私有属性:属性名前面有两个下划线,那么这样的属性称为私有属性# 私有方法:方法名前面有两个下划线,那么这样的方法称为私有方法 # 私有属性和私有方法的特点:# 私有属性和私有方法只能在当前类中使用,不能类外或者其他类(子类)里面使用 class Person(object): def __init__(self,name,age): self.name = name self.__age = age def show(self): print(self.name,self.__age) de

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称