二.python面对对象 ------类和对象

 

1.类

 类:具有相同的属性和方法的 对象 的集合
 对象:万物皆对象
 类和对象的关系:
 类的包含属性和方法:
 类是对象的模板
 对象是类的实例
语法:
    class 类名: 
        属性  
        方法 
定义一个类:
#如果做全局属性:
# 列:
# 带参函数
class Preson:  
 def eat(self):  
  print("正在吃饭");  
def sleep(self): 
  print("正在睡觉")  
类的命名

 首字母大写

        以大小写分割单词

        不使用下划线“_”


=========================================

2.创建对象

属性写在类外的情况,就是通过对象.属性,对象.方法()的方法调用
对象的三要素:属性(对象是什么)、方法(对象能做什么)、事件(对象如何响应)
相互关系:类是对象的抽象,对象是类的实例,类是一种抽象事物的分类,对象是一种实例;


3.属性

概念:用于访问类字段的成员;

属性用途:保证数据的安全,作数据的验证;

属性名

 使用名词,说明操作对象
 
首字母小写

以大写字母分割单词


方法名:

       使用谓词(动词+对象),说明对什么对象进行什么操作
 
       首字母小写

       以大写字母分隔单词

       updatePhone、a

属性相对于类来说属于全局,每个方法都可以调用;

=======================================
4.属性分归属  类属性 对象属性

对象属性的两种创建方式:

  self 对象的载体
   def __int__(self,name,age):  
        self.name=name;  
        self,age=age;  
        创建对象属性  




5. 对象名.属性 赋值的形式



6.  __init__(self,name,age)   在创建类的实例的时候,

    回自动调用这个方法,一般用户对实例属性初始化;

class Person:  

      def __init__(self,name,age):  

#self.name 创建一个属性交name 并且把v_name 赋值给了name

            self.name=name;  

            self.age=age

            print("执行init时就被调用了") 

p=Person("tom",22) 

print(p.name) 

print(p.age)  

>>>  执行init时就被调用了  

     tom  

     22 


=================================================

7. __new__(cls,*agrs,**kwargs)

    在类调用init方法时,new方法决定是否要用init方法,因为new可以调用其他类的方法,或者返回别的对象来

作为本类的实例;

new()方法的特性:

 new()方法时在类准备将自身实例化时调用;

 new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器;
class A(object):  
    def __init__(self,*args,**kwargs):  
        print( "init &&&&  %s" % self.__class__)  
    def __new__(cls,*args,**kwargs):  
        print( "new &&&&  %s" % cls)  
        return object.__new__(cls,*args,**kwargs)  
a=A()  
>>>  new &&&&  <class '__main__.A'>  
     init &&&&  <class '__main__.A'>  

=================================================
8.对象属性 私有和共有
 
  类属性 公有和私有

  对属性进行私有化 __属性,外部访问不到,也不可对属性进行赋值
class Person(object):  
     def __init__(self, name):  
         self.name = name  
         self._title = 'Mr'  
         self.__job = 'Student'  
p = Person('Bob')  
print (p.name)  
  Bob  
print (p._title)  
  Mr  
print (p.__job)  


=================================================

9. 封装  2步

    (1)把属性变成私有

   (2)用set()和get()函数写一个方法 
class Person:  
    def __init__(self,name,age):  
        self.name=name  
        self.__age=age  
    def getAge(self):  
        return self.__age  
    def setAge(self, age):  
        if age<0 or age>100:  
            self.__age=18;  
        else:  
            self.__age=age  
    def showtime(self):  
        print("姓名:{}".format())  
p=Person("as",20);  
print(p.getAge())  
p.setAge(10)  
print(p.getAge())  
>>>  20  
     10  


=================================================

10.def __str__() 一个类的实例变成str,需要用特殊方法__str__()

class Person(object):  

    def __init__(self, name, gender): 

        self.name = name  

        self.gender = gender    

p = Person('Bob', 'male')  

print (p)  

>>> <__main__.Person object at 0x02171270>

class Person(object):  

    def __init__(self, name, gender):  

        self.name = name  

        self.gender = gender  

    def __str__(self):  

        return '(Person: %s, %s)' % (self.name, self.gender)  

p = Person('Bob', 'male')  

print (p)  

>>>  (Person: Bob, male)  



=================================================

11.公有方法和私有方法;

    私有方法在方法前加两个下划线:def __text():


12. 自动销毁方法:__del__(): 当对象没有引用的时候,

    或程序结束的时候,程序自动调用__del__()

class Person:  

     def __init__(self,name,age):  

         self.name=name  

         self.age=age  

     def __del__(self):  

         print("对象张三被销毁")  

zhangsan=Person("张三",20)  

zhangsan.__del__()  

>>> 对象张三被销毁  

    对象张三被销毁  


=================================================

13.测试对象有多少次引用 

    import sys
    t=T()
    sys.getrefcount(t)返回2  从2开始
import  sys  
class Person: 
    def __init__(self,name,age):  
        self.name=name;  
        self.age=age;  
zhangsan=Person("张三",20)  
print(sys.getrefcount(zhangsan))  
>>> 2  

14.访问私有属性可以通过 对象._类名__属性访问到(不建议用这个方法)


15.id()函数 查看对象的内存地址;



16.类属性:属于类成员,对象共有的;

    类方法:cls 表明是 类

                  在方法上添加 @classmethod装饰器

                  def class_method(cls):

                  可以通过类方法调用类属性,也可以通过对象调用类属性;
修改类属性的2种方式:

                  1.类名.类属性=... 
                  2.实例对象__class__类属性=...

          静态方法:前面加@staticmethod,静态方法可以加参数,与类和对象都没有关系,也可以通过类和对象调用;

                      

class Person:  

    def __init__(self,name,age):  

        self.name=name;  

        self.age=age;    

    def showInfo(self):  

        print("姓名{0} 年龄{1}".format(self.name, self.age))  

  

    @staticmethod  

    def goHome(self,name, by):  

       print(name, "回家...", by)  



17. dir()   __dir__  展示一个类/对象的内部属性和函数;

          dir(zhangsan)
  
          zhangsan.__dir__()  

猜你喜欢

转载自blog.csdn.net/HWJ990/article/details/80302045